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

请求协助:Python脚本出错停止时自动重启Raspberry

实现Python脚本崩溃时自动重启树莓派

嘿,我来帮你搞定这个需求!要实现当你的Arduino通信Python脚本因错误停止时,让树莓派自动重启,这里有两种实用的方案,你可以按需选择:

方案一:利用Systemd服务监控+触发系统重启

树莓派默认用Systemd管理服务,我们可以配置它在脚本服务失败时执行系统重启:

  1. 创建脚本的Systemd服务文件
    打开终端,创建一个服务配置文件:

    sudo nano /etc/systemd/system/arduino-comm.service
    

    粘贴以下内容,记得把/path/to/your/script.py换成你实际的脚本路径:

    [Unit]
    Description=Arduino Communication Script
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/python3 /path/to/your/script.py
    User=pi
    # 当服务失败时,触发自定义的重启服务
    OnFailure=restart-rpi.service
    StandardOutput=journal+console
    StandardError=journal+console
    
    [Install]
    WantedBy=multi-user.target
    
  2. 创建触发系统重启的服务文件
    再创建一个专门用来重启系统的服务:

    sudo nano /etc/systemd/system/restart-rpi.service
    

    粘贴内容:

    [Unit]
    Description=Restart Raspberry Pi when Arduino script fails
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/sudo /sbin/reboot
    
  3. 启用并启动服务
    执行以下命令让配置生效:

    sudo systemctl daemon-reload
    sudo systemctl enable arduino-comm.service
    sudo systemctl start arduino-comm.service
    

    这样一来,只要你的Python脚本因为错误退出,Systemd就会触发restart-rpi.service,让树莓派自动重启。

方案二:用Shell脚本定时监控进程

如果觉得Systemd的配置有点复杂,你可以写一个简单的监控脚本,定时检查Python脚本是否在运行:

  1. 创建监控脚本
    打开终端创建脚本:

    nano ~/monitor_script.sh
    

    粘贴以下内容,替换your_script.py为你的脚本名称:

    #!/bin/bash
    SCRIPT_NAME="your_script.py"
    
    while true; do
        # 检查脚本进程是否存在
        if ! pgrep -f "$SCRIPT_NAME" > /dev/null; then
            # 进程不存在,执行重启
            sudo reboot
        fi
        # 每30秒检查一次,可调整时间
        sleep 30
    done
    
  2. 给脚本添加执行权限

    chmod +x ~/monitor_script.sh
    
  3. 设置开机自动运行监控脚本
    可以用crontab让脚本开机启动:

    crontab -e
    

    在文件末尾添加一行:

    @reboot /home/pi/monitor_script.sh &
    

    保存退出即可。

额外优化建议

如果你希望先尝试重启脚本,实在不行再重启系统,可以修改方案一的arduino-comm.service,让Systemd先尝试重启脚本几次,失败后再触发系统重启。修改后的[Service]部分:

[Service]
ExecStart=/usr/bin/python3 /path/to/your/script.py
User=pi
Restart=on-failure
RestartSec=5
# 60秒内最多重启3次,超过则触发失败逻辑
StartLimitBurst=3
StartLimitInterval=60
OnFailure=restart-rpi.service
StandardOutput=journal+console
StandardError=journal+console

记得测试一下:手动停止你的Python脚本,看看树莓派是否会自动重启,确保配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:22:34