上篇讲述了通过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等等。在这里,暂时了解两项内容:
systemd管理服务的一些亮点:
- 用户可以直接在Service配置文件中定义CGroup相关指令来对该服务程序做资源限制。
- 用户可以选择Journal日志而非采用rsyslog,这意味着用户可以不用单独去配置rsyslog,而且可以直接通过systemctl或journalctl命令来查看某服务的日志信息。当然,该功能并不适用于所有情况,比如用户需要管理日志时
- 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/