系统开机时自动执行指令

发布于:2025-08-03 ⋅ 阅读:(15) ⋅ 点赞:(0)

使用 systemd 创建一个服务单元可以让系统开机时自动执行指令,假设需要执行的指令如下,运行可执行文件(/home/demo/可执行文件),并输入参数(–input=/home/config/demo.yaml):

/home/demo/可执行文件 --input=/home/config/demo.yaml

✅ 推荐方法:使用 systemd

1. 创建服务文件

以 root 权限创建一个新的服务文件,例如:

sudo nano /etc/systemd/system/demo.service
2. 编写服务内容

将以下内容粘贴进去(根据你的实际路径和用户名修改):

[Unit]
Description=demo
After=network.target

[Service]
ExecStart=/usr/bin/taskset -c 0/home/demo/可执行文件 --input=/home/config/demo.yaml
Restart=always
User=yourusername
Environment="DISPLAY=:0"
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

⚠️ 注意:

  • yourusername 替换为你运行这个程序的实际用户。
  • 如果程序需要图形界面或访问 X11,请确保 Environment="DISPLAY=:0" 正确。
  • 如果不需要 taskset,可以直接写成 ExecStart=/home/cpp/build/tennis_line --input=/home/config/lines.yaml
  • 一般情况下只需要更改ExecStartUser
配置项 含义
Description Tennis Line Detection Service 服务名称描述
After network.target 在网络就绪后启动
ExecStart taskset -c 0 … 实际执行的命令
Restart always 出现任何退出都重启
User yourusername 指定运行服务的用户
Environment DISPLAY=:0 设置环境变量,用于图形界面,指定显示器
StandardOutput syslog 标准输出记录到 syslog
StandardError syslog 错误输出也记录到 syslog
WantedBy multi-user.target 在多用户模式下启动
3. 重新加载 systemd 配置
sudo systemctl daemon-reload
4. 启用服务开机自启
sudo systemctl enable tennis-line.service
5. 可选:立即启动服务
sudo systemctl start tennis-line.service
6. 查看日志确认是否运行正常
journalctl -u tennis-line.service

禁用开机自启

  1. 禁用服务

    使用 systemctl disable 命令可以禁用指定的服务,使其不会在系统启动时自动启动。

    sudo systemctl disable demo.service
    

    这个命令会移除 /etc/systemd/system/multi-user.target.wants/ 目录下的相应符号链接(如果存在),从而达到禁止该服务随系统启动而启动的目的。

  2. 停止正在运行的服务(可选)

    如果这个服务当前正在运行,并且想停止它,可以使用 systemctl stop 命令:

    sudo systemctl stop demo.service
    
  3. 确认服务已被禁用

    可以通过查询服务的状态来确认它是否已经被正确禁用。禁用后,服务将不会随着系统的启动而自动启动,但仍然可以通过手动启动来运行。

    sudo systemctl demo.service
    

    在输出中,会看到类似“Loaded: loaded (…) disabled;”的信息,表示该服务已禁用。

删除服务文件(可选)

如果确定以后完全不需要这个服务了,也可以考虑删除相应的服务单元文件。请谨慎操作,因为这将永久删除该服务的所有配置。

sudo rm /etc/systemd/system/tennis-line.service

之后,别忘了重新加载 systemd 配置,以便更改生效:

sudo systemctl daemon-reload

完成以上步骤后, demo.service 就不会再在系统启动时自动启动了。


网站公告

今日签到

点亮在社区的每一天
去签到