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

Ubuntu系统中启动应用程序内脚本崩溃后的自动重启方案及Python脚本相关疑问

Ubuntu系统中启动应用程序内脚本崩溃后的自动重启方案及Python脚本相关疑问

先直接给你个明确答案:Ubuntu 20.04的Startup Applications不会自动重启崩溃的脚本。它的作用只是在你登录系统时帮你启动一次程序,没有监控程序运行状态、崩溃后自动重启的能力。

接下来给你几个靠谱的解决办法,按推荐程度排序:

方法一:用systemd服务(推荐,Ubuntu原生支持)

systemd是Ubuntu默认的初始化系统,自带进程监控和重启机制,非常适合你的场景。

  1. 创建一个systemd服务配置文件,比如frigate-sms.service,路径放在/etc/systemd/system/下:

    [Unit]
    Description=Frigate MQTT SMS Trigger Service
    After=network.target
    
    [Service]
    User=你的用户名  # 替换成实际登录Ubuntu的用户名
    WorkingDirectory=/path/to/your/script/folder  # 替换成Python脚本所在的目录
    ExecStart=/usr/bin/python3 /path/to/your/script/your_script.py  # 替换成脚本的完整路径
    Restart=always  # 不管程序以什么原因退出,都自动重启
    RestartSec=5  # 崩溃后等待5秒再重启,避免频繁重启
    StandardOutput=journal+console  # 日志输出到journalctl,方便排查问题
    StandardError=journal+console
    
    [Install]
    WantedBy=multi-user.target
    
  2. 保存文件后,执行以下命令让systemd识别这个服务:

    sudo systemctl daemon-reload
    
  3. 设置服务开机自启:

    sudo systemctl enable frigate-sms.service
    
  4. 现在就可以启动服务了:

    sudo systemctl start frigate-sms.service
    

以后如果脚本崩溃,systemd会自动帮你重启。你可以用journalctl -u frigate-sms.service -f来实时查看脚本的日志,排查问题。

方法二:用Supervisor进程管理工具

Supervisor是专门用来监控和管理进程的工具,配置起来也很简单。

  1. 先安装Supervisor:

    sudo apt update && sudo apt install supervisor
    
  2. 创建一个配置文件,比如frigate-sms.conf,放在/etc/supervisor/conf.d/下:

    [program:frigate-sms]
    command=/usr/bin/python3 /path/to/your/script/your_script.py
    directory=/path/to/your/script/folder
    user=你的用户名
    autostart=true
    autorestart=true  # 崩溃自动重启
    startretries=3  # 启动失败重试3次
    stdout_logfile=/var/log/frigate-sms.log  # 日志文件路径
    stderr_logfile=/var/log/frigate-sms.err.log
    
  3. 重新加载Supervisor配置并启动服务:

    sudo supervisorctl reread
    sudo supervisorctl update
    sudo supervisorctl start frigate-sms
    

你可以用supervisorctl status frigate-sms查看脚本状态,用supervisorctl restart frigate-sms手动重启。

方法三:简单的Shell脚本循环(适合快速测试)

如果不想折腾服务管理工具,可以写个简单的shell脚本,让它循环检查Python脚本是否运行,没运行就启动。

  1. 创建一个restart_script.sh文件:

    #!/bin/bash
    while true; do
        # 检查脚本是否在运行,没运行就启动
        if ! pgrep -f "your_script.py" > /dev/null; then
            echo "脚本崩溃,正在重启..." >> /var/log/frigate-sms-restart.log
            /usr/bin/python3 /path/to/your/script/your_script.py
        fi
        sleep 10  # 每10秒检查一次
    done
    
  2. 给脚本加执行权限:

    chmod +x restart_script.sh
    
  3. 把这个shell脚本添加到Startup Applications里,这样登录后它就会一直监控你的Python脚本,崩溃了就重启。

不过这个方法不如前两种可靠,比如如果脚本被强制杀死,或者进程名冲突可能会失效,适合临时用用。

备注:内容来源于stack exchange,提问作者j zeng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:28:02