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 会话在服务器重启后丢失