树莓派使用systemd设置 开机自运行python脚本

先介绍一下systemd

  • systemd 这个名称来源于 “system” 和 “daemon” 的组合:
  • system:表示它是一个系统级的管理工具,负责管理整个系统的启动和服务。
  • daemon:在 Unix/Linux 系统中,daemon(守护进程) 是指在后台运行的程序,通常用于提供服务。
  • 因此,systemd 可以理解为一个用于管理系统和服务的后台程序。它的设计旨在替代传统的初始化系统(如 SysVinit)以提供更高效的服务管理、并行启动和依赖关系管理等功能。

一个实用例子

最近使用树莓派做了一个颜色跟随的小车,小车就得脱离电源线和视频线实现开机即运行python脚本,可以使用systemd设置实现。

已在树莓派 4b 和树莓派 zero 2W 实验成功。

1. 创建 systemd 服务单元文件

systemd 使用单元(unit)文件来描述和管理服务、设备、挂载点等。单元文件通常位于 /etc/systemd/system/ 或 /lib/systemd/system/ 目录下:

  1. 打开终端,使用你喜欢的文本编辑器(如 nano、vim 或 gedit)创建一个新的服务单元文件。例如,你可以命名为 myscript.service:
sudo nano /etc/systemd/system/myscript.service
  1. 在文件中输入以下内容,根据你的脚本路径和需求进行修改:
  • Description=My Custom Script:这是对该服务的简短描述,用于在 systemctl status 命令输出中显示,方便用户理解该服务的目的。
  • After=network.target:表示该服务将在网络服务启动后才启动,确保网络可用,适合需要网络连接的脚本。
  • After=multi-user.target:表示该服务将在多用户目标达到后启动,确保系统已进入正常工作状态,适合需要与用户会话交互的服务。
  • Restart=on-failure:定义服务的重启策略。如果该服务由于非正常原因(例如崩溃)退出,将会自动重启。
  • StandardOutput=journal 和 StandardError=journal:将标准输出和标准错误输出重定向到 systemd 日志系统(journald),方便后续使用 journalctl 查看日志,便于调试和监控。
  • WantedBy=multi-user.target:指定该服务在 multi-user.target 目标下自动启动。通过 systemctl enable 命令可以将该服务设置为开机自启。
[Unit]
Description=My Custom Script
After=network.target multi-user.target
 
[Service]
ExecStart=/usr/bin/python3 /home/pi/Desktop/project/main.py # 改成你的脚本路径
Restart=on-failure
RestartSec=10 # 设置在重启服务之前等待的时间,这里是 10 秒。可以防止服务频繁崩溃导致快速重启。
StandardOutput=journal
StandardError=journal
 
[Install]
WantedBy=multi-user.target
  1. Ctrl + X 保存并关闭文件。

2. 重新加载 systemd 配置

每当你修改了 systemd 的服务单元文件后,都需要重新加载 systemd 配置,以确保它识别到新的或修改过的服务。

sudo systemctl daemon-reload

3. 启用并启动服务

  1. 启用服务,使其在系统启动时自动运行:
sudo systemctl enable myscript.service
  1. 立即启动服务(如果你希望现在就运行它)
sudo systemctl start myscript.service

4. 检查服务状态

你可以使用以下命令来检查服务的状态,确保它正在运行且没有错误:

sudo systemctl status myscript.service

5. 重启树莓派

reboot

6. 调试和日志

  1. 如果服务没有按预期运行,你可以先看看是不是你的python脚本没有执行权限,没有可以执行命令:
sudo chmod +x /home/pi/Desktop/project/main.py
  1. 或者查看 systemd 的日志来获取更多信息:这将显示与 myscript.service 相关的所有日志条目,帮助你诊断问题。
  • -f:实时跟踪日志输出,适合监控服务运行状态:
journalctl -u myscript.service -f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shaun Max

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值