systemd 文件夹配置文件夹
systemd 配置文件存在于以下三个文件夹中:
/etc/systemd/system
存放系统启动的默认级别及启动的 unit 的软连接,优先级最高/run/systemd/system
系统执行过程中产生的服务脚本,优先级次之/usr/lib/systemd/system
存放系统上所有的启动文件。优先级最低
unit 分类
unit 的定义文件可以根据其后缀名称识别其定义的类型,可以使用 systemctl -t help 查看。
.servicre
定义了系统服务的启动.target
定义了系统启动的级别标签,systemd 没有运行级别的概念,创建标签只是为了兼容老版本。.socket
定义了进程通信用到的套接字,套接字与进程是分离的.device
定义了系统启动时内核识别的文件,systemd 提供了设备的管理功能,/dev 下的设备由 /etc/udev/ 下的配置文件与.device 共同定制.mount
定义了系统的文件系统的挂载点.snapshop
系统快照.swap
用于标识 swap 设备.automount
文件系统的自动挂载点.path
用于定义文件系统中的一个文件或目录使用。常用于文件系统发生变化时,延迟激活服务。
文件组成
文件通常由 3 段组成:
[Unit]
[unit 的类型:service target socket]
[install]
[Unit]
不属于第二个标签的定义都放在这里,或存放不属于 unit 类型的定义,描述信息,依赖的 unit
Description
:描述信息After
:表明需要依赖的服务,作用决定启动顺序Before
:表明被依赖的服务Requles
:依赖到的其他 unit ,强依赖,即依赖的 unit 启动失败。该 unit 不启动。Wants
:依赖到的其他 unit,弱依赖,即依赖的 unit 启动失败。该 unit 继续启动Conflicts
:定义冲突关系
[Unit 类型 ]
[Service]:
type
:启动时关系的定义,simple
:(当设置了ExecStart=
、 但是没有设置Type=
与BusName=
时,这是默认值), 那么ExecStart=
进程就是该服务的主进程exec
:与simple
类似,不同之处在于, 只有在该服务的主服务进程执行完成之后,systemd
才会认为该服务启动完成。forking
:exec
启动的进程生成的其中一个子进程成为主进程,启动完成后,旧的主进程会退出。ontshot
:启动下一个进程前主进程退出。dbus
:与simple
类似,不同之处在于, 该服务只有获得了BusName=
指定的D-Bus
名称之后,systemd
才会认为该服务启动完成,才会开始启动后继单元。notify
:与exec
类似,不同之处在于, 该服务将会在启动完成之后通过sd_notify(3)
之类的接口发送一个通知消息ldle
:与simple
类似,不同之处在于, 服务进程将会被延迟到所有活动任务都完成之后再执行。
PIDFile
:type
字段如果设置为forking
,建议同时设置PIDFile
选项,以帮助systemd
准确可靠的定位该服务的主进程。systemd
将会在父进程退出之后 立即开始启动后继单元。EnvironmentFile
:指定当前服务的环境参数文件。该文件内部的key=value
键值对,可以用$key
的形式,在当前配置文件中获取。ExecStart
:启动服务需要执行的命令ExecStartpre
:启动服务之前执行的命令ExecStartpost
:启动服务之后执行的命令ExecStop
:停止服务时执行的命令Restart
:定义启动进程时执行的命令ExecReload
:重启服务时执行的命令KillMode
:定义如何停止服务control-group
(默认值):当前控制组里面的所有子进程,都会被杀掉process
:只杀主进程mixed
:主进程将收到SIGTERM
信号,子进程收到SIGKILL
信号none
:没有进程会被杀掉,只是执行服务的stop
命令。
RestartSec
:表示重启服务之前,需要等待的秒数。
[install]
定义如何安装这个配置文件,即怎样做到开机启动
- Alias
- RequlredBy: 被那些 unit 所依赖,
- WanteBy: 表示该服务所在的 Target,含义是服务组,表示一组服务。WantedBy=multi-user.target 指的是,sshd 所在的 Target 是 multi-user.target。
systemctl 命令
# 列出正在运行的 Unit
systemctl list-units,可以直接使用 systemctl
# 列出所有 Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all
# 列出所有没有运行的 Unit
systemctl list-units --all --state=inactive
# 列出所有加载失败的 Unit
systemctl list-units --failed
# 列出所有正在运行的、类型为 service 的 Unit
systemctl list-units --type=service
# 显示某个 Unit 是否正在运行
systemctl is-active application.service
# 显示某个 Unit 是否处于启动失败状态
systemctl is-failed application.service
# 显示某个 Unit 服务是否建立了启动链接
systemctl is-enabled application.service
# 立即启动一个服务
systemctl start apache.service
# 立即停止一个服务
systemctl stop apache.service
# 重启一个服务
systemctl restart apache.service
# 重新加载一个服务的配置文件
systemctl reload apache.service
# 重载所有修改过的配置文件
systemctl daemon-reload
注意事项
注:修改了的 unit 文件 需要重载。systemctl daemon-reload
文档信息
- 本文作者:Lewin
- 本文链接:https://lewinz.com/2021/07/12/linux-systemctl/
- 版权声明:自由转载-非商用-非衍生-保持署名