systemd.unit #
详见文档 systemd.unit(5)
。
text
单元配置的常见目录(优先级从高到低):
/etc/systemd/system 本地配置的系统单元
/run/systemd/system 运行时配置的系统单元
/lib/systemd/system 第三方软件安装的系统单元
单元配置文件类型:
.service 系统服务
.socket 被systemd接管的相关服务的网络套接字
.path 用于激活另一个单元的路径
.timer 用于激活另一个单元的定时器
.target 定义一组unit的启动同步点
.device 由systemd管理的设备
.mount 由systemd管理的挂载点
.swap 由systemd管理的交换空间
.automount 启动时自动挂载的挂载点
.slice 通过cgroups控制组节点限制资源
.snapshot 当前systemd状态的快照
单元配置 #
ini
[Unit]
Description=
After=
Requires=
[Service]
Type=
ExecStart=
ExecReload=
[Install]
WantedBy=
单元命名 #
单元名仅能包含 ASCII 字符,下划线和点号和有特殊意义的字符(’@’, ‘-’)。 其它字符需要用 C-style “\x2d” 替换。参阅 systemd.unit(5) 和 systemd-escape(1) 。
text
注意:
1. 挂载点会自动转化为相应的 .mount 单元。例如 /home 等价于 home.mount 。
2. 设备会自动转化为相应的 .device 单元。例如 /dev/sda2 等价于 dev-sda2.device 。
3. 模板单元(name@.suffix 相较于普通单元多了 @ 标记)可以被实例化(name@instance.suffix),在单元配置中使用参数 %i 来指代实例名称。
Unit 部分 #
描述单元信息和依赖关系。
text
Description: 简要描述
Documentation: 文档地址,支持 http://、https://、file:、info:、man: 等URI。
Wants: 弱依赖单元列表(空格分隔)。所有父单元将被启动。
Requires: 强依赖单元列表(空格分隔)。所有父单元将被启动,任意父单元启动失败,将导致本单元启动失败。
After: 先启动单元列表(空格分隔)。仅用于确定启动顺序,无依赖关系。
Before: 后启动单元列表(空格分隔)。仅用于确定启动顺序,无依赖关系。
BindsTo: 类似于Requires。任意一个父单元停止,将导致本单元停止。
PartOf: 类似于Requires。任意一个父单元停止或重启,将导致本单元停止或重启。
Conflicts: 冲突单元列表(空格分隔)
OnFailure: 失败回退单元列表(空格分隔)。当本单元启动失败时,将启动列表中的所有单元。
Service 部分 #
服务信息。
text
Type: 服务类型
simple: 当设置了ExecStart=、但是没有设置Type=与BusName=时,这是默认值。执行ExecStart命令,启动主进程。
exec: 与simple类似,但只有在该服务的主服务进程执行完成之后,systemd才会认为该服务启动完成。
forking: 执行ExecStart命令,启动父进程,由父进程启动若干子进程,
父进程退出表示启动结束,之后会检测子进程PID作为主进程,
配合PIDFile来确定哪个子进程为主进程,若未提供PIDFile则自动猜测子进程PID。
oneshot: 执行ExecStart命令,进程退出表示服务启动结束,之后判断退出状态码以确定服务状态,
此类型服务永远不会进入active状态。此种类型的服务通常需要设置RemainAfterExit=选项。
当Type=与ExecStart=都没有设置时,Type=oneshot就是默认值。
dbus: 此服务通过D-Bus启动。
notify: 类似于simple。程序运行到某一阶段后发出通知信号,告诉systemd服务启动成功。
可以在Shell中使用systemd-notify命令或在C中调用sd_notify()方法来发送通知信号。
idle: 其他任务执行完毕,才会启动此服务。
ExecStart:
ExecStartPre:
ExecStartPost:
ExecCondition:
ExecReload:
ExecStop:
ExecStopPost:
Restart: 自动重启策略(always / on-success / on-failure / on-abnormal / on-abort / on-watchdog)
RestartSec: 自动重启间隔秒数
TimeoutSec: 启动或停止的超时秒数
Install 部分 #
可选。安装信息。
text
WantedBy:
RequiredBy:
Alias: 别名,如 sshd.service
Also: 当前单元被 enable/disable 时,会被同时操作的其他单元。