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

树莓派Python脚本出错或中断时自动重启方案咨询

我之前在树莓派上维护过类似的24小时不间断运行的串口通信脚本,太懂这种时不时崩溃、半夜还要爬起来重启的痛苦了!给你几个亲测有效的自动重启方案,从简单易上手到稳定可靠的都有,按需选择:

方案1:Shell脚本基础监控(新手友好)

如果不想折腾复杂工具,用个简单的Shell脚本定时检查进程就行,步骤很简单:

  1. 新建一个监控脚本,比如check_my_script.sh,内容如下(记得替换成你的脚本路径和名称):
#!/bin/bash
# 要监控的Python脚本名称(或者进程关键词)
TARGET_SCRIPT="your_serial_script.py"
# 脚本的绝对路径
SCRIPT_PATH="/home/pi/projects/$TARGET_SCRIPT"

# 检查进程是否存在
if ! pgrep -f "$TARGET_SCRIPT" > /dev/null; then
    # 进程不存在,重启脚本并记录日志
    echo "$(date '+%Y-%m-%d %H:%M:%S'): 脚本已停止,正在重启..." >> /home/pi/script_restart.log
    python3 "$SCRIPT_PATH" &
fi
  1. 给脚本添加执行权限:
chmod +x /home/pi/check_my_script.sh
  1. crontab设置定时检查,比如每3分钟检查一次:
    打开crontab编辑界面:
crontab -e

添加一行:

*/3 * * * * /home/pi/check_my_script.sh

保存退出后,crontab就会自动定时执行监控脚本了。

方案2:Systemd服务(推荐,最稳定)

Systemd是树莓派系统自带的服务管理工具,专门用来管理长期运行的服务,支持自动重启、开机自启,稳定性拉满:

  1. 新建一个Systemd服务文件,比如/etc/systemd/system/serial_script.service
[Unit]
Description=24/7 Serial Communication Python Script
After=network.target  # 确保网络启动后再运行脚本

[Service]
User=pi  # 用pi用户运行,避免权限问题
ExecStart=/usr/bin/python3 /home/pi/projects/your_serial_script.py  # 脚本的绝对路径
Restart=always  # 不管什么原因退出都自动重启
RestartSec=5  # 崩溃后等待5秒再重启
# 记录日志,方便排查问题
StandardOutput=append:/home/pi/script_output.log
StandardError=append:/home/pi/script_error.log

[Install]
WantedBy=multi-user.target  # 多用户模式下开机自启
  1. 重新加载Systemd配置,启动服务并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl start serial_script.service
sudo systemctl enable serial_script.service
  1. 可以随时查看服务状态或日志:
# 查看服务运行状态
sudo systemctl status serial_script.service
# 查看最新日志
journalctl -u serial_script.service -f
方案3:Supervisor进程管理工具(功能丰富)

Supervisor是专门的进程监控工具,除了自动重启,还能方便地查看日志、手动启停进程,适合需要更多管控功能的场景:

  1. 安装Supervisor:
sudo apt update && sudo apt install supervisor
  1. 新建Supervisor配置文件,比如/etc/supervisor/conf.d/serial_script.conf
[program:serial_script]
command=/usr/bin/python3 /home/pi/projects/your_serial_script.py  # 启动命令
directory=/home/pi/projects/  # 脚本所在目录
user=pi  # 运行用户
autostart=true  # 开机自动启动
autorestart=true  # 崩溃自动重启
startretries=3  # 启动失败重试3次
stdout_logfile=/home/pi/script_stdout.log  # 标准输出日志
stderr_logfile=/home/pi/script_stderr.log  # 错误日志
  1. 重启Supervisor使配置生效:
sudo systemctl restart supervisor
  1. 常用操作:
# 查看进程状态
sudo supervisorctl status serial_script
# 手动重启进程
sudo supervisorctl restart serial_script
# 查看所有受监控的进程
sudo supervisorctl status
额外建议
  • 尽量在Python脚本内部添加异常捕获:比如对串口通信、网络请求的代码加try-except块,把错误信息写入日志,能减少不必要的崩溃,也方便排查问题。
  • 日志一定要重视:不管用哪种方案,开启日志后,出现问题时能快速定位崩溃原因,而不是只知道脚本重启了。
  • 用绝对路径:所有脚本、文件的路径都用绝对路径,避免因为工作目录变化导致找不到文件的问题。

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

火山引擎 最新活动