如何在Raspbian Buster系统上将Python脚本设置为守护进程
树莓派RFID门禁脚本守护化方案
方案1:systemd服务(推荐,树莓派默认预装无需额外依赖)
这是当前Linux发行版通用的进程管理方案,稳定性最高,完全满足开机自启、异常自动重启的需求,还自带日志收集能力可以帮你定位脚本30分钟退出的原因。
操作步骤:
- 新建服务配置文件
/etc/systemd/system/rfid-access.service,写入以下内容:
[Unit] Description=RFID门禁控制系统服务 After=multi-user.target [Service] Type=simple # 替换为你实际的Python3绝对路径、脚本绝对路径 ExecStart=/usr/bin/python3 /home/pi/rfid/access_control.py # 替换为脚本实际运行用户,默认树莓派为pi User=pi # 只要进程退出就自动重启,包括正常退出、崩溃、被杀死等场景 Restart=always # 重启间隔5秒,避免崩溃死循环占用资源 RestartSec=5 # 替换为脚本实际的工作目录,如果你用相对路径读取yaml配置必须设置正确 WorkingDirectory=/home/pi/rfid # 日志输出到系统日志,方便排查问题 StandardOutput=syslog StandardError=syslog SyslogIdentifier=rfid-access [Install] WantedBy=multi-user.target
- 给配置文件设置正确权限:
sudo chmod 644 /etc/systemd/system/rfid-access.service - 重载systemd配置使其生效:
sudo systemctl daemon-reload - 设置开机自启:
sudo systemctl enable rfid-access.service - 立即启动服务:
sudo systemctl start rfid-access.service - 常用排查命令:
- 查看运行状态:
sudo systemctl status rfid-access.service - 查看实时日志:
journalctl -u rfid-access.service -f - 查看历史日志排查退出原因:
journalctl -u rfid-access.service --since "1 hour ago"
- 查看运行状态:
方案2:supervisor进程管理(适合需要同时管理多个服务的场景)
如果后续你还需要在设备上跑其他配套服务,可以用supervisor统一管理,配置更灵活。
操作步骤:
- 安装supervisor:
sudo apt update && sudo apt install supervisor -y - 新建进程配置文件
/etc/supervisor/conf.d/rfid-access.conf,写入以下内容:
[program:rfid-access] command=/usr/bin/python3 /home/pi/rfid/access_control.py directory=/home/pi/rfid user=pi # 开机自动启动 autostart=true # 异常自动重启 autorestart=true # 启动失败重试次数 startretries=3 # 日志存储路径 stdout_logfile=/var/log/rfid-access.log stderr_logfile=/var/log/rfid-access.err.log
- 重载配置启动服务:
sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start rfid-access
注意事项
- 所有路径建议都用绝对路径,避免相对路径找不到yaml配置、串口设备等问题导致的异常退出
- 可以配合脚本内的异常捕获逻辑,比如USB串口断开时自动重试,进一步提升稳定性
内容的提问来源于stack exchange,提问作者kothmann1
相关产品推荐
相关产品推荐

