Linux 怎么让进程在后台持续运行?

SSH 断开后进程就停了,想让程序在后台持续运行

解决方案

用 nohup(最简单) 推荐

# 后台运行并忽略挂断信号
nohup node server.js > output.log 2>&1 &

# 查看输出
tail -f output.log

# 查看后台进程
jobs -l

nohup 让进程忽略 SIGHUP 信号(终端关闭时发送)。& 放到后台。输出重定向到文件。

适用场景:临时让一个命令在后台跑

用 systemd 服务(生产环境推荐) 推荐

# 创建服务文件
sudo vim /etc/systemd/system/myapp.service

# 内容:
# [Unit]
# Description=My Application
# After=network.target
#
# [Service]
# Type=simple
# User=deploy
# WorkingDirectory=/opt/myapp
# ExecStart=/usr/bin/node server.js
# Restart=always
#
# [Install]
# WantedBy=multi-user.target

# 启用并启动
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp

systemd 是 Linux 标准的服务管理器。支持自动重启、日志管理、开机启动。

适用场景:生产环境部署,需要自动重启和管理

用 screen/tmux(开发调试)

# tmux 方式
tmux new -s myapp        # 创建会话
node server.js           # 运行程序
# Ctrl+B 然后按 D        # 分离会话
tmux attach -t myapp     # 重新连接

# screen 方式
screen -S myapp
node server.js
# Ctrl+A 然后按 D
screen -r myapp

tmux/screen 创建持久化的终端会话,断开 SSH 后会话继续存在,可以随时重新连接。

适用场景:需要随时回来查看输出和交互

用 pm2(Node.js 项目)

# 安装
npm install -g pm2

# 启动
pm2 start server.js --name myapp

# 管理
pm2 list
pm2 logs myapp
pm2 restart myapp
pm2 stop myapp

# 开机自启
pm2 startup
pm2 save

pm2 是 Node.js 的进程管理器,支持集群模式、日志管理、自动重启。

适用场景:Node.js 项目的进程管理

注意事项

nohup 不会自动重启崩溃的进程
生产环境不要只用 nohup,应该用 systemd 或 pm2
tmux/screen 会话在服务器重启后丢失

相关命令