You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在AWS EC2后台用nohup运行Python代码,避免SSH断开后进程终止?

解决AWS EC2断开SSH后Python脚本终止的问题

看起来你已经尝试用nohup来让脚本后台运行了,不过咱们可以一步步确认操作是否到位,再给你几个更稳妥的方案:

1. 确认nohup的执行效果

你已经执行了:

nohup /home/ec2-user/task1/vote.py &

这个命令会把进程放到后台,默认将输出写入当前目录的nohup.out文件。你可以通过以下命令确认进程是否还在运行:

ps aux | grep vote.py

如果能看到PID为27248的对应进程,说明已经成功后台运行。断开SSH后重新连接实例,再用同样的命令检查进程是否存在即可。

如果进程还是消失了,大概率是脚本本身存在依赖终端输入、或者运行中异常退出的问题,你可以查看nohup.out里的日志排查:

cat nohup.out

2. 更灵活的后台会话方案:screentmux

如果你需要随时重新连接到脚本的运行终端(比如查看实时输出、临时调试),screen或者tmux会比nohup更实用:

使用screen

  • 先安装screen(根据EC2实例的系统选择命令):
sudo yum install screen  # 适用于Amazon Linux/CentOS
# 或者
sudo apt install screen  # 适用于Ubuntu/Debian
  • 创建一个专属会话:
screen -S vote_session
  • 在这个会话里运行你的脚本:
python /home/ec2-user/task1/vote.py
  • 按下Ctrl+A再按D,就能脱离这个会话,此时断开SSH进程依然会持续运行。
  • 下次连接EC2后,重新回到会话:
screen -r vote_session

使用tmux(更现代的替代工具)

  • 安装tmux
sudo yum install tmux
# 或者
sudo apt install tmux
  • 创建会话:
tmux new -s vote_session
  • 运行脚本后,按下Ctrl+B再按D脱离会话。
  • 重新连接会话:
tmux attach -t vote_session

3. 持久化运行:配置systemd服务

如果希望脚本在EC2实例启动时自动运行,并且异常退出后能自动重启,推荐将脚本配置成systemd服务:

  1. 创建服务配置文件:
sudo vi /etc/systemd/system/vote.service
  1. 写入以下内容(注意根据你的实际路径调整):
[Unit]
Description=Vote Data Collection Script
After=network.target

[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user/task1
ExecStart=/usr/bin/python /home/ec2-user/task1/vote.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  1. 重新加载systemd配置:
sudo systemctl daemon-reload
  1. 启动服务并设置开机自启:
sudo systemctl start vote
sudo systemctl enable vote
  1. 查看服务状态和实时日志:
sudo systemctl status vote
# 查看实时运行日志
journalctl -u vote -f

这样配置后,不管是断开SSH还是实例重启,脚本都会持续运行,还能自动恢复异常退出的情况。

内容的提问来源于stack exchange,提问作者Yipin

火山引擎 最新活动