Linux-通过systemctl给Linux增加开机启动脚本

通过systemctl给Linux增加开机启动脚本

man systemd.unit 查看 systemd 查找 unit 文件的路径以及优先级。

systemd默认情况下会从/etc/stsremd/system这个位置加载开机启动文件,这些文件可以是service、target、mount类型的脚本。

下面我们以树莓派为例,通过systemctl给树莓派添加一个开机启动服务,也就是service。

创建开机启动服务(service)

我们在/etc/stsremd/system这个目录下创建一个 mystartup.service文件,并且写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[Unit]
# 描述
Description=Startup Script for user %i
# 在这些服务启动之后再启动
After=systemd-network.target network-online.target time-sync.target rc-local.service
# 依赖于这些服务,如果这些服务启动失败,则本服务不启动
Requires=systemd-network.target network-online.target time-sync.target

[Service]
Type=oneshot
# 服务被启动或者执行 systemctl mystartup.service start 的时候调用的命令
ExecStart=/bin/bash mystartup.sh start
#ExecStop=/bin/bash mystartup.sh stop
# 命令执行时候的工作目录
WorkingDirectory=/home/pi
#StandardOutput=inherit
#StandardError=inherit
StandardOutput=journal
StandardError=journal
#Restart=always
User=pi

[Install]
WantedBy=multi-user.target

创建开机启动脚本

上面的service文件是systemd在系统启动时候调用的,其中ExecStart的内容就是service启动的时候执行的命令。可以直接写要执行的命令;也可以写一个脚本的地址,那么在系统启动的时候执行的就是这个脚本的内容。
这里的例子是一个脚本。
我们按照ExecStart里所写的脚本地址创建一个mystartup.sh,它的完整路径是/home/pi/mystartup.sh,具体脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
case "$1" in
start)
echo "Script start"
;;
stop)
echo "Script stop"
;;
*)
echo "Usage: service mystartup start|stop"
exit 1
;;
esac
exit

刷新service列表

我们写好 service 文件之后,还不能被systemd识别,需要刷新一下service列表,才能被识别:

1
systemctl daemon-reload

执行了上述命令之后,我们的服务就可以被systemctl命令识别了。

设置服务为开启启动

1
systemctl enable mystartup.service

这样,当我们再次开机的时候,脚本就能自动调用了。

取消服务开机启动

1
systemctl disable mystartup.service

查看运行状态

systemctl status mystartup.service
journalctl -u mystartup.service


Linux-通过systemctl给Linux增加开机启动脚本
https://dnacore.github.io/post/4cc30002-6fa7-4c2b-9f9c-f740391054aa.html
作者
DNACore
发布于
2022年9月6日
更新于
2025年1月24日
许可协议