systemd.unit

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 时,会被同时操作的其他单元。
2025年7月14日