如何让Python脚本关闭Shell后持续运行?CentOS环境Discord Bot运维
刚好在CentOS上部署过Discord Bot,碰到过和你一样的问题——关闭SSH终端进程就挂了。给你几个靠谱的解决方案,按需选择就行:
方案1:用nohup(最简单快速,适合临时测试)
这是最省事的临时方案,不需要额外安装工具:
- 运行Bot时加上nohup和后台符号:
nohup python3 your_bot.py & - 执行后终端会提示你进程ID,Bot就会在后台跑了,关闭SSH也不会停
- Bot的输出日志会默认存在当前目录的
nohup.out文件里,想看日志可以用cat nohup.out或者tail -f nohup.out实时查看 - 要停止Bot的话,先找进程ID:
然后用ps aux | grep your_bot.pykill 进程ID结束进程
方案2:用screen/tmux(适合需要随时重新连接查看Bot输出的场景)
如果需要偶尔回到Bot的运行终端看输出或者调试,screen/tmux是更好的选择,它们能帮你保存会话:
用screen的步骤:
- 先安装screen(CentOS默认可能没有):
sudo yum install screen -y - 创建一个新的会话:
screen -S bot_session - 在这个会话里正常运行你的Bot:
python3 your_bot.py - 按
Ctrl+A+D组合键,就能脱离这个会话回到主终端,此时Bot还在screen会话里运行,关闭SSH也没问题 - 下次想重新查看Bot的运行状态,重新连接会话:
screen -r bot_session - 如果记不清会话名,可以用
screen -ls列出所有会话 - 要彻底停止Bot和会话,先连接会话,按
Ctrl+C停Bot,再输入exit关闭会话
用tmux的话步骤类似,只是命令稍有不同,比如创建会话是tmux new -s bot_session,脱离是Ctrl+B+D,重新连接是tmux attach -t bot_session,按需选择就行
方案3:用systemd服务(最稳定,适合长期运行的生产环境)
这是我最推荐的方案,适合需要长期稳定运行的Bot,它能实现开机自动启动、进程崩溃自动重启,完全不用你手动管后台:
- 创建一个systemd服务文件:
sudo nano /etc/systemd/system/discord-bot.service - 粘贴以下内容,注意替换成你自己的信息:
[Unit] Description=Discord Bot Service After=network.target # 确保网络启动后再启动Bot [Service] User=your_username # 替换成运行Bot的系统用户名 WorkingDirectory=/path/to/your/bot/folder # 替换成Bot脚本所在的目录 ExecStart=/usr/bin/python3 your_bot.py # 替换成Python路径和你的Bot脚本名 Restart=always # 进程崩溃时自动重启 RestartSec=5 # 崩溃后5秒再重启 StandardOutput=journal+console # 日志输出到systemd的journal [Install] WantedBy=multi-user.target - 保存并退出nano(按
Ctrl+O,回车,再按Ctrl+X) - 重新加载systemd配置:
sudo systemctl daemon-reload - 启动Bot服务:
sudo systemctl start discord-bot - 设置开机自动启动:
sudo systemctl enable discord-bot - 常用管理命令:
- 查看Bot运行状态:
systemctl status discord-bot - 查看实时日志:
journalctl -u discord-bot -f - 停止Bot:
sudo systemctl stop discord-bot - 重启Bot:
sudo systemctl restart discord-bot
- 查看Bot运行状态:
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

