systemd
不仅仅只要service
一个类型,还有其他类型,例如: socket
、target
、timer
等等,可是service
无疑是最最重要的一个,所以本篇文章将介绍service
装备文件。
systemd unit装备文件途径
装备目录阐明
systemd
装备文件,有2个途径,分别是:
/usr/lib/systemd/system
该目录包括体系装置的软件所供给的systemd
装备单元文件,一般情况下,该文件均有软件包所属,管理员不应该直接修正此文件,若后续对包进行晋级都有或许替换掉这些文件,
/etc/systemd/system
该目录存放管理员界说的systemd
单元文件,管理员能够在此目录下界说systemd
单元文件,若该目录下的文件和/usr/lib/systemd/system
目录下的文件名称一致,则以该目录下装备为准,因为操作体系会优先读取该目录下的装备。
装备优先级比如
这儿举个比如。
操作步骤:首要使用systemctl status
检查nginx
的状况,而且将其loaded
的装备单元文件挪到/etc/systemd/system/nginx.service
下,再重载下装备文件,而且从头检查nginx
的状况。
检查nginx
状况:
# systemctl status nginx
将装备文件挪到/etc/systemd/system/
下
# cp -a /usr/lib/systemd/system/nginx.service /etc/systemd/system/
# ls -l /usr/lib/systemd/system/nginx.service /etc/systemd/system/nginx.service
从头加载装备
# systemctl daemon-reload
从头检查nginx的状况
# /etc/systemd/system/nginx.service
通过上面的事例能够剖析得出,当/usr/lib/systemd/system/
和 /etc/systemd/system/
都存在装备文件的时分,是以/etc/systemd/system/
为准。
软件晋级导致/usr/lib/systemd/system/
装备文件被重置,这儿将不做演示。
service 装备结构
service装备组成部分
systemd
一切的单元装备文件均有如下三个部分组成:
-
Unit
:systemd
单元的基本元数据,如描绘、文档指定依靠关系等。 -
单元类型: 这儿根据
systemd
单元类型的不同,装备也相应的不同,例如:service
单元应当装备[Service]
,而socket
单元应当装备Socket
等。 -
Install
: 界说单元的装置和发动装备。
如Service
类型所界说的装备文件应当为:
[Unit]
;; 描绘Unit、指定依靠关系等
[Service]
;; Service 详细装备,如,发动、中止指令,发动方法等。
[Install]
;; 界说Service装置和发动装备
除此之外,systemd
还允许加载额定的装备文件,以nginx.service
为例,处理在/etc/systemd/system/nginx.service
外,还将从/etc/systemd/system/nginx.service.d/*.conf
下读取装备,配合格局和上述一致。
service装备详细意义
Unit
装备描绘
关键字 | 描绘 |
---|---|
Description |
该装备为单元概述,该内容会记录到systemctl status 输出中。 |
Documentation |
该装备为单元协助文档,参数以空格切割的URL列表,引用单元或装备的文档。有固定的类型格局。 |
Requires |
该装备为装备单元的依靠关系,如果依靠的单元无法发动,则该单位就无法激活。 |
Wants |
该装备为单元的依靠关系,比Requires 还要弱的装备,如果依靠的单元无法发动,则该单位也能够正常发动。 |
Before |
该装备界说发动单位的顺序,装备的单元将在本单元前发动。 |
After |
该装备界说发动单位的顺序,装备的单元将在本单元后发动。 |
这儿提及一下,Requires
和 Wants
以及 Before
和 After
的差异,前两者表明依靠关系,后两者表明发动顺序。
Service
装备描绘
关键字 | 描绘 |
---|---|
Type |
该装备为进程发动的类型。 |
ExecStart |
该装备表明在发动该单元要履行的指令或许脚本。 |
ExecStop |
该装备表明在中止时需求履行的指令或许脚本。 |
ExecReload |
该装备表明在从头载入单元的时分需求履行的指令或许脚本。 |
Restart |
该装备表明进程在反常退出后,会被从头发动。 |
KillSignal |
该装备表明体系要中止或许从头发动服时,使用指定的信号来通知进程,默许信号为SIGTERM 。 |
除此之外,不仅有ExecStart
,还能装备数条ExecStartPre
,该装备表述在发动之前应当履行的指令或许脚本,可是ExecStart
仅有一条;除此之外,还有ExecStopPre
、ExecReloadPre
以此类推。
Install
装备描绘
关键字 | 描绘 |
---|---|
Alias |
该装备表明为该单元供给别号,除systemctl enable 外,其余均可使用别号控制。 |
WantedBy |
该装备表明当设置该单元开机自启后,希望于放入哪个target 下。 |
RequiredBy |
该装备表明该单元在何种target 下被发动。 |
Also |
该装备表明引入一个额定的装备项。 |
剖析nginx.service装备文件
这儿先剖析一下nginx.service
文件,如果想要自界说该文件,建议先仿制到/etc/systemd/system/
下,详细装备信息为:
# cp -a /usr/lib/systemd/system/nginx.service /etc/systemd/system/
# cat /etc/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#
上述装备中,
[Unit]
表明该装备单元的概述:
-
Description
是简介,在使用systemctl status
检查状况的时分,会显示出来,例如:
-
After
表明在发动nginx
后,要发动network-online.target
、remote-fs.target
、nss-lookup.target
等单元。 -
Wants
表明在发动nginx
之前要发动想要的依靠,这儿是network-online.target
,当然即使发动不成功,也会正常发动nginx
的。
[Service]
表明服务本身装备
-
Type
表明发动的方法,这儿是fork
一个新的进程来发动 -
PIDFile
表明界说的pid
途径 -
ExecStartPre
表明在发动服务前履行的动作,这儿将删去此前的pid
,指令为:/usr/bin/rm -f /run/nginx.pid
,而后又是ExecStartPre
,该参数能够多次呈现,履行的指令为:/usr/sbin/nginx -t
-
ExecStart
表明发动服务履行的指令,指令为:/usr/sbin/nginx
-
ExecReload
表明履行systemctl reload
履行的指令,该指令为/usr/sbin/nginx -s reload
-
KillSignal
表明履行systemctl stop
的时分,向进程发出的信号,SIGQUIT
的信号值为:3 -
TimeoutStopSec
表明中止最大时间为5秒 -
KillMode
表明杀掉的类型为进程 -
PrivateTmp
表明发动服务的时分发动临时文件体系处理
Install
表明服务的装置和发动装备
-
WantedBy
表明当使用systemctl enable
的时分,希望将此服务放置到multi-user.target
中
总结
在创立systemd
装备单元时,能够往2个目录写装备文件,分别是:/usr/lib/systemd/system/
和 /etc/systemd/system/
,如果是自界说的单元,那么往哪个目录放都能够,如果是修正目前已有的装备文件,建议仿制/usr/lib/systemd/system/
到/etc/systemd/system/
进行修正,避免因为软件晋级等要素,导致装备文件修正内容丢掉。
systemd
一切的单元装备文件均有3个部分组成,分别是Unit
、详细的类型、Install
,其中对于Service
而言,应当至少包括发动指令或许脚本等。