如何在SSH断开连接后仍让GCE上的程序保持持续运行
GCE VM实例实现程序脱离SSH持续运行的方案
GCE 提供的 Linux 虚拟机和标准 Linux 发行版环境完全兼容,你已知的 nohup 方案可以直接使用,除此之外还有多种不同稳定性、易用性的方案可选,适配不同使用场景:
1. 临时运行场景:直接使用 nohup
操作最简单,适合临时启动不需要开机自启的程序:
- 执行命令时添加
nohup前缀和&后缀,将进程放到后台运行,示例如下:nohup python3 your_script.py > run_output.log 2>&1 & - 参数说明:
> run_output.log代表将程序标准输出写入日志文件,2>&1代表将错误输出也重定向到同一日志文件,末尾的&代表将进程切换到后台运行 - 后续可通过
ps aux | grep 你的程序名命令查询进程运行状态
2. 需要手动交互场景:使用终端复用工具 tmux
适合需要随时回到程序运行终端查看输出、手动操作的场景,比 nohup 易用性更高:
- 先安装工具,Debian/Ubuntu 系统执行:
sudo apt install tmux -y;CentOS/RHEL 系统执行:sudo dnf install tmux -y - 执行
tmux命令新建一个独立的终端会话 - 在会话内正常启动你的程序,之后按下
Ctrl+B再按下D即可将会话挂起到后台,此时就算 SSH 断开,会话内的程序也会持续运行 - 下次重新连接 SSH 后,执行
tmux attach即可恢复之前的终端会话,直接查看程序运行状态、进行交互操作
3. 生产级稳定运行场景:配置 systemd 系统服务
适合核心业务程序,支持崩溃自动重启、实例开机自动启动,完全不依赖 SSH 会话状态:
- 新建服务配置文件:
sudo nano /etc/systemd/system/your-app.service - 写入以下配置,按实际情况替换对应参数即可:
[Unit] Description=你的程序功能描述 After=network.target [Service] User=你的VM实例登录用户名 WorkingDirectory=你的程序所在目录的绝对路径 ExecStart=你的程序启动命令的绝对路径 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target - 重载 systemd 配置使新服务生效:
sudo systemctl daemon-reload - 启动程序:
sudo systemctl start your-app.service - 设置实例开机后自动启动程序:
sudo systemctl enable your-app.service
- 后续可通过
sudo systemctl status your-app.service查看程序运行状态,通过journalctl -u your-app.service -f实时查看程序输出日志
内容的提问来源于stack exchange,提问作者sksoumik
相关产品推荐
相关产品推荐

