一、Systemd支持的Unit文件类型
.automount 自动挂载文件系统
.device 主要用于定义设备之间的依赖,对应/dev目录下的设备
.mount 替代/etc/fstab文件
.path 用于监控指定目录的变化,并触发其他unit运行
.scope Systemd管理,描述系统服务的分组信息
.service 守护进程的相关操作
.slice 描述cgroup的信息
.snapshot Systemd unit运行状态的快照
.swap 定义虚拟内存的交换分区
.target 对unit进行逻辑分组,引导其他unit运行,替代SYSV运行级别。
.timer 由Systemd中时间触发的动作,替代crontab
二、Unit文件存放目录(从下到上优先级增加)
/etc/systemd/system 系统或用户提供的配置文件(特权用户存放)
/run/systemd/system 软件运行时生成的配置文件(非特权用户存放)
/use/lib/systemd/system 系统或第三方软件配置文件(系统更新将被覆盖)
三、Service文件字段说明
[ Unit ]
1、Description
描述文字
2、Documentation
文档,可以是一个或多个文档的URL路径
3、Requires
依赖列表,在当前服务启动时同时启动,如何有失败,则当前服务将被终止。
4、Wants
依赖列表,不考虑是否启动成功。
5、After
依赖列表,列表中所有模块启动完成,才会启动当前服务。
6、Before
启动当前服务后,才启动列表中的模块。
7、BindsTo
强关联依赖列表,在运行过程中,如果列表服务意外结束或重启,当前服务也会跟着终止或重启。
8、PartOf
BindsTo的子集,只有当PartOf列出的模块失败或重启时,当前服务才终止或重启。
9、OnFailure
当前服务启动失败时,则启动列表中模块。
10、Conflicts
定义冲突模块,如果列表中模块已经在运行,则不启动当前服务。
[ Install ]
说明:此段中的配置需要通过systemctl enable命令来激活,通过systemctl disable命令禁用。
1、WantedBy
与Wants作用相似,只是列出的不是服务所依赖的模块,而是依赖当前服务的模块。
2、RequiredBy
依赖当前服务的模块。
3、Also
当前服务被enable/disable时,将自动enable/disable列表中的模块
[ Service ]
服务生命周期控制
1、Type
服务的类型,simple(默认)、forking。如果服务程序启动后会通过fork系统调用创建子进程,然后关闭程序本身进程,则应该将Type设置为forking,否则Systemd将不会跟踪子进程的行为,而认为服务已经退出。
2、RemainAfterExit
true/false 默认为false。当值为true时,Systemd只负责启动服务进程,之后即便退出仍会认为服务在运行。主要提供给一些非常驻内存,而是启动后立即退出,然后等待消息按需启动的特殊类型。
3、ExecStart
指定服务启动的主要命令,仅一个。
4、ExecStartPre
指定在启动ExecStart命令前的准备工作,可以有多个。
5、ExecStartPost
指定在启动ExecStart命令后的收尾工作,可以有多个。
6、TimeoutStartSec
启动服务的等待秒数,超时则Systemd认为服务启动失败,设置为0关闭超时检测。
7、ExecStop
停止服务所需要执行的主要命令。
8、ExecPost
指定在ExecStop命令执行后的收尾工作,可以有多个。
9、TimeoutStopSec
停止服务的等待时间,超时则认为没有成功停止,Systemd会使用SIGKILL信号强行杀死服务进程。
10、Restart
指定在什么情况下需要重启服务进程。常用值:no(默认)、no-success、on-failure、on-abnormal、on-abort、always。
服务退出原因 |
no |
always |
on-failure |
on-abnormal |
on-abort |
no-success |
正常退出 |
√ |
√ |
||||
异常退出 |
√ |
√ |
||||
启动/停止超时 |
√ |
√ |
√ |
|||
被异常KILL |
√ |
√ |
√ |
√ |
11、RestartSec
如果服务需要被重启,该值为服务被重启前的等待秒数。
12、ExecReload
重新加载服务所需要执行的主要命令。
13、Environment
为服务添加环境变量。
14、Nice
服务的进程优先级,值越小优先级越高,默认为0,-20~19(不建议低于-5(内核中断优先级))。
15、WorkingDirectory
指定服务的工作目录。
16、RootDirectory
指定服务进程的根目录,如果配置了此参数,服务将无法访问指定目录以外的任何文件。
17、User
指定运行服务的用户。
18、Group
指定运行服务的用户组。
19、LimitCPU/LimitSTACK/LimitNOFILE/LimitNPROC
限制服务可用的系统资源。
20、PIDFile
指定PID文件目录。
修改完成记得使用:
sudo systemctl daemon-reload 重载Unit文件