请求协助:Python脚本出错停止时自动重启Raspberry
实现Python脚本崩溃时自动重启树莓派
嘿,我来帮你搞定这个需求!要实现当你的Arduino通信Python脚本因错误停止时,让树莓派自动重启,这里有两种实用的方案,你可以按需选择:
方案一:利用Systemd服务监控+触发系统重启
树莓派默认用Systemd管理服务,我们可以配置它在脚本服务失败时执行系统重启:
创建脚本的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创建触发系统重启的服务文件
再创建一个专门用来重启系统的服务: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启用并启动服务
执行以下命令让配置生效:sudo systemctl daemon-reload sudo systemctl enable arduino-comm.service sudo systemctl start arduino-comm.service这样一来,只要你的Python脚本因为错误退出,Systemd就会触发
restart-rpi.service,让树莓派自动重启。
方案二:用Shell脚本定时监控进程
如果觉得Systemd的配置有点复杂,你可以写一个简单的监控脚本,定时检查Python脚本是否在运行:
创建监控脚本
打开终端创建脚本: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给脚本添加执行权限
chmod +x ~/monitor_script.sh设置开机自动运行监控脚本
可以用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
相关产品推荐
相关产品推荐

