S_lion's Studio

创建开机自启程序(下篇)

字数统计: 1.2k阅读时长: 5 min
2021/08/01 Share
上篇讲述了通过rc.local可以实现程序的开机自启,这篇说说centOS7以后的推荐方式`systemd service`。

systemd service

systemd Service是systemd提供的用于管理服务启动、停止和相关操作的功能,它极大的简化了服务管理的配置过程,用户只需要配置几项指令即可。

systemd service是systemd所管理的其中一项内容。实际上,systemd service是Systemd Unit的一种,除了Service,systemd还有其他几种类型的unit,比如service、socket、slice、scope、target等等。在这里,暂时了解两项内容:

  • Service类型,定义服务程序的启动、停止、重启等操作和进程相关属性

  • Target类型,主要目的是对Service(也可以是其它Unit)进行分组、归类,可以包含一个或多个Service Unit(也可以是其它Unit)

systemd管理服务的一些亮点:

  1. 用户可以直接在Service配置文件中定义CGroup相关指令来对该服务程序做资源限制。
  2. 用户可以选择Journal日志而非采用rsyslog,这意味着用户可以不用单独去配置rsyslog,而且可以直接通过systemctl或journalctl命令来查看某服务的日志信息。当然,该功能并不适用于所有情况,比如用户需要管理日志时
  3. Systemd Service还有其它一些特性,比如可以动态修改服务管理配置文件,比如可以并行启动非依赖的服务,从而加速开机过程等等。

systemd服务配置文件存放路径

systemd 默认从目录/etc/systemd/system/读取配置文件。里面存放的大部分文件都是符号链接,真正的配置文件存放在/usr/lib/systemd/system/,如果用户需要,可以将服务配置文件手动存放至用户配置目录/etc/systemd/system下。该目录下的服务配置文件可以是普通.service文件,也可以是链接至/usr/lib/systemd/system目录下服务配置文件的软链接。

位于/usr/lib/systemd/system下的服务配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
[root@slions_pc1 ~]# ls -l /usr/lib/systemd/system/*.service|head -10
-rw-r--r--. 1 root root 275 11月 14 2018 /usr/lib/systemd/system/abrt-ccpp.service
-rw-r--r--. 1 root root 380 11月 14 2018 /usr/lib/systemd/system/abrtd.service
-rw-r--r--. 1 root root 361 11月 14 2018 /usr/lib/systemd/system/abrt-oops.service
-rw-r--r--. 1 root root 266 11月 14 2018 /usr/lib/systemd/system/abrt-pstoreoops.service
-rw-r--r--. 1 root root 262 11月 14 2018 /usr/lib/systemd/system/abrt-vmcore.service
-rw-r--r--. 1 root root 311 11月 14 2018 /usr/lib/systemd/system/abrt-xorg.service
-rw-r--r--. 1 root root 275 10月 31 2018 /usr/lib/systemd/system/arp-ethers.service
-rw-r--r--. 1 root root 222 10月 31 2018 /usr/lib/systemd/system/atd.service
-rw-r--r--. 1 root root 1384 8月 8 2019 /usr/lib/systemd/system/auditd.service
lrwxrwxrwx. 1 root root 14 5月 21 16:45 /usr/lib/systemd/system/autovt@.service -> getty@.service

下面这些目录(*.target.wants)定义各种类型下需要运行的服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@slions_pc1 ~]# ls -1dF /etc/systemd/system/*
/etc/systemd/system/basic.target.wants/
/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service@
/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service@
/etc/systemd/system/default.target@
/etc/systemd/system/default.target.wants/
/etc/systemd/system/getty.target.wants/
/etc/systemd/system/local-fs.target.wants/
/etc/systemd/system/multi-user.target.wants/
/etc/systemd/system/network-online.target.wants/
/etc/systemd/system/sockets.target.wants/
/etc/systemd/system/sysinit.target.wants/
/etc/systemd/system/system-update.target.wants/
/etc/systemd/system/vmtoolsd.service.requires/

/etc/systemd/system/multi-user.target.wants下的服务配置文件,几乎都是软链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@slions_pc1 ~]# ls -l /etc/systemd/system/multi-user.target.wants/ | awk '{print $9,$10,$11}'
abrt-ccpp.service -> /usr/lib/systemd/system/abrt-ccpp.service
abrtd.service -> /usr/lib/systemd/system/abrtd.service
abrt-oops.service -> /usr/lib/systemd/system/abrt-oops.service
abrt-vmcore.service -> /usr/lib/systemd/system/abrt-vmcore.service
abrt-xorg.service -> /usr/lib/systemd/system/abrt-xorg.service
atd.service -> /usr/lib/systemd/system/atd.service
auditd.service -> /usr/lib/systemd/system/auditd.service
chronyd.service -> /usr/lib/systemd/system/chronyd.service
crond.service -> /usr/lib/systemd/system/crond.service
irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
kdump.service -> /usr/lib/systemd/system/kdump.service
libstoragemgmt.service -> /usr/lib/systemd/system/libstoragemgmt.service
mdmonitor.service -> /usr/lib/systemd/system/mdmonitor.service

systemd service文件格式

基本的配置文件格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description = some descriptions
Documentation = man:xxx(8) man:xxx_config(5)
Requires = xxx1.target xxx2.target
After = yyy1.target yyy2.target

[Service]
Type = <TYPE>
ExecStart = <CMD_for_START>
ExecStop = <CMD_for_STOP>
ExecReload = <CMD_for_RELOAD>
Restart = <WHEN_TO_RESTART>
RestartSec = <TIME>

[Install]
WantedBy = xxx.target yy.target

一个.Service配置文件分为三部分:

  • Unit:定义该服务作为Unit角色时相关的属性
  • Service:定义本服务相关的属性
  • Install:定义本服务在设置服务开机自启动时相关的属性。换句话说,只有在创建/移除服务配置文件的软链接时,Install段才会派上用场。这一配置段不是必须的,当未配置[Install]时,设置开机自启动或禁止开机自启动的操作将无任何效果

参考文档

http://www.jinbuguo.com/systemd/systemd.service.html

https://www.junmajinlong.com/linux/systemd/service_1/

CATALOG
  1. 1. systemd service
  2. 2. systemd服务配置文件存放路径
  3. 3. systemd service文件格式
  4. 4. 参考文档