Ubuntu系统下如何分离进程 关闭PuTTY后程序仍可持续运行
方案1:使用nohup命令(最便捷,适合临时运行)
nohup会忽略终端挂断信号,进程在关闭SSH连接后依然会保留运行。
执行命令:nohup python3 你的机器人脚本路径.py &
- 执行后程序的标准输出和错误会默认写入当前目录下的
nohup.log文件 - 如需自定义日志路径,使用命令:
nohup python3 你的机器人脚本路径.py > 自定义日志文件路径.log 2>&1 & - 要查看运行状态,执行
ps aux | grep python3即可找到对应进程PID - 需要停止程序时执行
kill 对应的PID即可
方案2:使用screen会话工具(适合需要随时查看程序前台输出的场景)
你之前操作未生效大概率是操作步骤有误,按以下流程操作即可:
- 先安装screen:
sudo apt update && sudo apt install screen -y - 新建专属会话:
screen -S chatbot - 进入会话后正常执行你的Python3启动命令,运行聊天机器人
- 按下
Ctrl + a后松开,再按d即可将会话放在后台运行,此时可以直接关闭PuTTY - 下次需要重新进入会话查看输出时,执行
screen -r chatbot即可 - 如果忘记会话名称,执行
screen -ls即可查看所有后台运行的screen会话
方案3:配置systemd系统服务(最稳定,适合长期后台运行的服务)
该方案可以实现开机自动启动、程序崩溃自动重启,适合生产环境长期部署:
- 新建服务配置文件:
sudo nano /etc/systemd/system/chatbot.service - 写入以下配置,注意替换占位内容为你自己的实际路径和用户名:
[Unit] Description=聊天机器人后台服务 After=network.target [Service] User=你的Ubuntu用户名 WorkingDirectory=你的聊天机器人脚本所在的文件夹绝对路径 ExecStart=/usr/bin/python3 你的聊天机器人脚本的绝对路径.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
- 保存退出后,重载系统服务配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start chatbot - 设置开机自动启动:
sudo systemctl enable chatbot - 常用操作命令:
- 查看服务运行状态:
sudo systemctl status chatbot - 查看实时运行日志:
journalctl -u chatbot -f - 重启服务:
sudo systemctl restart chatbot - 停止服务:
sudo systemctl stop chatbot
- 查看服务运行状态:
之前操作失效的原因说明
Ctrl+z + bg的操作只是将进程放到当前SSH会话的后台运行,进程依然和当前会话绑定,关闭PuTTY断开SSH连接时,系统会给会话下的所有进程发送SIGHUP挂断信号,进程会被直接终止,所以无法实现后台常驻- 若screen操作未生效,大概率是操作时未正确执行detach步骤,或安装的screen版本存在异常,按上述方案2的步骤重新操作即可解决
相关运行截图:

内容的提问来源于stack exchange,提问作者hengjuice
相关产品推荐
相关产品推荐

