You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统下如何自动重启崩溃的Python脚本(EC2场景)

可行实现方案

以下两种方案均可以满足你崩溃自动重启、不启动重复实例的需求,可根据你的使用习惯选择:

方案1:Systemd进程托管(推荐)

Linux系统原生的systemd服务天生支持进程异常自动重启,无需手动编写校验逻辑,可靠性最高,也可以完美适配你原有的每日重启需求。
操作步骤:

  1. 新建service配置文件,路径为 /etc/systemd/system/python_script.service,填写如下内容,替换尖括号内的占位符为你自己的实际路径:
[Unit]
Description=My Python running script
After=network.target

[Service]
User=<你的EC2登录用户名,比如ubuntu/ec2-user>
WorkingDirectory=<你的脚本所在目录的绝对路径>
ExecStart=<Python解释器的绝对路径,比如/home/ubuntu/venv/bin/python3> <你的Python脚本绝对路径>
Restart=always
RestartSec=5
# 异常退出后5秒自动重启,可根据需求调整间隔时长

[Install]
WantedBy=multi-user.target
  1. 执行以下命令启用服务:
  • 重载systemd配置:sudo systemctl daemon-reload
  • 启动服务:sudo systemctl start python_script.service
  • 如需开机自动启动:sudo systemctl enable python_script.service
  1. 适配原有每日重启逻辑:只需要在crontab加一条定时重启服务的任务即可,比如每天凌晨1点重启:
    0 1 * * * sudo systemctl restart python_script.service
  2. 排查问题可查看实时日志:journalctl -u python_script.service -f

方案2:Crontab加防重入校验(适配你原有思路)

如果你不想改动现有配置,想直接用高频crontab触发,只需在启动命令中加防重入逻辑即可,保证同一时间只有一个实例运行:

方式A:flock文件锁(最稳妥)

利用Linux自带的flock工具实现文件锁,只要脚本正在运行,锁就会被占用,后续触发的任务拿不到锁会直接退出,不会启动新实例。
crontab配置示例(每2分钟触发一次,可调整间隔):
*/2 * * * * /usr/bin/flock -n /tmp/my_python_script.lock <Python解释器绝对路径> <脚本绝对路径>
参数说明:-n 代表非阻塞模式,获取不到锁直接退出,不会产生等待队列。

方式B:进程名匹配校验

通过pgrep匹配正在运行的脚本进程,没有匹配结果才启动新实例:
crontab配置示例:
*/2 * * * * pgrep -f "<你的脚本绝对路径>" > /dev/null || <Python解释器绝对路径> <脚本绝对路径>
注意:脚本路径要写绝对路径,避免和其他同名进程混淆产生误判。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:09:02