如何在AWS EC2服务器退出登录后持续运行Python脚本?
嘿,这个问题我太熟了!在AWS EC2上跑长期运行的Python脚本,退出SSH登录后还能让它继续跑,有好几种靠谱的办法,我给你挨个说清楚:
方法1:用nohup(最简单直接,零学习成本)
这是最基础的方式,专门用来让命令在用户退出后继续运行。
- 运行脚本的命令:
末尾的nohup python3 your_script.py &&是让脚本在后台运行,nohup会拦截退出信号,保证脚本不会因为你断开SSH而终止。 - 默认情况下,脚本的输出会被写到当前目录的
nohup.out文件里,如果你想自定义日志位置,可以重定向输出:
这里nohup python3 your_script.py > my_script_logs.log 2>&1 &2>&1是把错误输出也转到日志文件里,方便后续排查问题。 - 想查看脚本是否还在运行?用这个命令找进程:
ps aux | grep your_script.py - 要停止脚本的话,找到进程ID(PID),然后执行:
kill <PID>
方法2:用screen/tmux(可随时重新连接会话,灵活度高)
如果需要时不时回到脚本的运行界面(比如看实时输出、交互操作),这两个工具就太合适了,它们相当于创建一个"持久化的终端会话"。
用screen的步骤:
- 先安装screen(如果是Ubuntu/Debian系统):
sudo apt update && sudo apt install screen - 创建一个新的会话:
screen -S my_python_session - 在这个会话里直接运行你的Python脚本:
python3 your_script.py - 现在你可以按下
Ctrl+A,然后松开按D,把这个会话"脱离"出来,之后就算退出SSH,脚本也会在这个会话里继续跑。 - 下次登录EC2后,想回到这个会话看情况,执行:
screen -r my_python_session - 想查看所有存在的screen会话:
screen -list
用tmux的步骤(功能比screen更丰富,推荐尝试):
- 安装tmux:
sudo apt update && sudo apt install tmux - 创建新会话:
tmux new -s my_script_session - 运行脚本后,按下
Ctrl+B,然后松开按D脱离会话。 - 重新连接会话:
tmux attach -t my_script_session
tmux还支持分屏、会话共享等功能,长期用的话会很顺手。
方法3:用systemd服务(最稳定,适合生产环境)
如果你的脚本需要长期稳定运行,甚至EC2重启后自动恢复,把它做成systemd系统服务是最佳选择,相当于让系统帮你托管这个脚本。
- 创建一个服务配置文件:
sudo nano /etc/systemd/system/my_long_script.service - 粘贴以下内容(根据你的实际情况修改路径、用户名):
[Unit] Description=My Long-Running Python Script After=network.target # 确保网络就绪后再启动脚本 [Service] User=ubuntu # 替换成你的EC2用户名,比如ubuntu或者ec2-user WorkingDirectory=/home/ubuntu/my_scripts # 脚本所在的目录 ExecStart=/usr/bin/python3 /home/ubuntu/my_scripts/your_script.py # 脚本的绝对路径 Restart=always # 脚本意外崩溃时自动重启 RestartSec=5 # 崩溃后5秒再重启 [Install] WantedBy=multi-user.target # 多用户模式下启用 - 保存退出后,重新加载systemd配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start my_long_script.service - 设置开机自启(可选,但推荐):
sudo systemctl enable my_long_script.service - 查看服务运行状态:
sudo systemctl status my_long_script.service - 查看脚本的运行日志:
末尾的journalctl -u my_long_script.service -f-f是实时查看日志,按Ctrl+C退出。
内容的提问来源于stack exchange,提问作者Jeremie
相关产品推荐
相关产品推荐

