以下是在树莓派 4 基于 Debian GNU/Linux 12 (Bookworm) 系统中,将 /home/admin/pyy_project/0x03/build/ 目录下的 0x01 软件设置为开机自启动,并在系统启动后等待 5 秒再启动该程序的步骤:
1. 创建 systemd 服务单元文件
-
使用文本编辑器(如 nano)创建一个新的 systemd 服务单元文件 /etc/systemd/system/0x01.service:
sudo nano /etc/systemd/system/0x01.service
-
在打开的文件中添加以下内容:
[Unit] Description=0x01 SoftWare Service After=network.target [Service] ExecStartPre=/bin/sleep 5 ExecStart=/home/admin/pyy_project/0x03/build/0x01 User=root Group=root Restart=on-failure Environment="LD_LIBRARY_PATH=/usr/local/lib:/usr/lib" WorkingDirectory=/home/admin/pyy_project/0x03/build [Install] WantedBy=multi-user.target
注意:这里要设置工作目录WorkingDirectory=/home/admin/pyy_project/0x03/build
,不然程序会加载不了/home/admin/pyy_project/0x03/build中的一些文件,导致程序功能丢失
- 将 /home/admin/pyy_project/0x03/build/0x01 替换为你的程序的实际路径,User 和 Group 可根据程序运行所需的用户和组进行修改,如果程序可以由普通用户运行,使用当前登录的用户(如 admin)即可。
- 按ctrl+x保存,再按回车退出
2. 重载systemd配置并启动服务
-
保存并关闭文件后,运行以下命令使 systemd 重新加载配置,使新的服务单元生效:
sudo systemctl daemon-reload
sudo systemctl enable 0x01.service
-
若要禁用一个服务,则使用以下指令:
sudo systemctl disable 0x01.service
3. 可以手动启动服务验证
-
手动启动 0x01 软件对应的服务:
sudo systemctl start 0x01.service
-
验证服务是否正常运行
sudo systemctl start 0x01.service
4. 给树莓派重新上电
树莓派重新上电后,系统会自动启用0x01.service服务,使用top指令来查看对应的程序是否已经运行。
查看服务运行的日志:
# 50 代表要查看日志的行数
journalctl -u 0x01.service -n 50
# 查看服务的全部日志
sudo journalctl -u my_service
# 实时跟踪日志(类似tail -f)
sudo journalctl -u my_service -f
# 查看最近100行
sudo journalctl -u my_service -n 100
# 按时间筛选(例如最近1小时)
sudo journalctl -u my_service --since "1 hour ago"
# 结合时间范围和日志级别筛选
sudo journalctl -u my_service -p err --since today
5. 说明
- [Unit] 部分:
- Description 用于描述该服务的名称,可自行修改,便于识别服务。
- After=network.target 表示该服务将在网络服务启动之后启动。
- [Service] 部分:
- ExecStartPre=/bin/sleep 5:在启动程序之前,使用 /bin/sleep 10 命令让系统等待 5 秒。
- ExecStart 是最重要的部分,指定了要启动的程序的完整路径。
- Restart=on-failure 表示当服务出现错误而退出时会尝试重新启动服务,可根据需要调整为 always (总是重启)或 no (不重启)等。
- User 和 Group 分别指定了运行该服务的用户和组,确保程序以指定用户或组的权限运行,避免使用 root 权限带来的安全风险。
- [Install] 部分:
- WantedBy=multi-user.target 表示该服务将在多用户模式下启动,即系统正常启动并进入多用户命令行或图形界面时会启动该服务。
这样,程序 /home/admin/pyy_project/0x03/build/0x01 将会在系统开机并等待 5 秒后自动启动,且以 root用户的权限运行.
请注意,使用 ExecStartPre=/bin/sleep 5 只是一种简单的实现方式,如果你需要更精确的时间控制或复杂的启动条件,可以考虑使用 systemd 的定时器功能或编写一个启动脚本,在脚本中添加等待逻辑。