概述
对于系统中的每一个单元(unit)都有一个配置文件,用于指示systemd如何启动或停止这个单元。
配置文件格式
[Unit]区块
[Unit]区块通常是配置文件的第一个区块,用来定义单元的元数据,以及配置与其他单元的关系。它的主要字段如下:
字段 | 作用 |
---|---|
Description | 简短描述 |
Documentation | 简短描述 |
Requires | 当前单元依赖的其他单元,如果它们没有运行,当前单元会启动失败 |
Wants | 与当前单元配合的其他单元,如果它们没有运行,当前单元不会启动失败 |
Before | 如果该字段指定的单元也要启动,那么必须在当前单元之后启动 |
After | 如果该字段指定的单元也要启动,那么必须在当前单元之前启动 |
Conflicts | 这里指定的单元不能与当前单元同时运行 |
Condition… | 当前单元运行必须满足的条件,否则不会运行 |
Assert… | 当前单元运行必须满足的条件,否则会报启动失败 |
[Install]区块
[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下:
字段 | 作用 |
---|---|
WantedBy | 它的值是一个或多个Target,当前单元激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target名+.wants后缀构成的子目录中 |
RequiredBy | 它的值是一个或多个Target,当前单元激活时,符号链接会放入/etc/systemd/system目录下面以 Target名+.required后缀构成的子目录中 |
Alias | 当前单元可用于启动的别名 |
Also | 当前单元激活(enable)时,会被同时激活的其它单元 |
[Service]区块
[Service]区块用于服务的配置,只有Service类型的单元才有这个区块。它的主要字段如下:
字段 | 作用 |
---|---|
Type | 定义服务启动方式 |
ExecStart | 启动当前服务的命令 |
ExecStartPre | 启动当前服务之前执行的命令 |
ExecStartPost | 启动当前服务之后执行的命令 |
ExecReload | 重启当前服务时执行的命令 |
ExecStop | 停止当前服务时执行的命令 |
ExecStopPost | 停止当其服务之后执行的命令 |
RestartSec | 自动重启当前服务间隔的秒数 |
Restart | 定义何种情况Systemd会自动重启当前服务,可能的值包括always、on-success、on-failure、on-abnormal、on-abort、on-watchdog |
TimeoutSec | 定义Systemd停止当前服务之前等待的秒数 |
Environment | 指定环境变量 |
服务启动方式
Type字段指明了服务启动时进程的行为,其包含如下几种值:
- Type=simple:默认值,执行ExecStart指定的命令,启动主进程
- Type=forking:以fork方式从父进程创建子进程,创建后父进程会立即退出
- Type=oneshot:一次性进程,Systemd会等当前服务退出,再继续往下执行
- Type=dbus:当前服务通过D-Bus启动
- Type=notify:与 Type=simple 相同,但约定服务会在就绪后向systemd发送一个信号
- Type=idle:systemd会等待所有任务处理完成后,才开始执行idle类型的单元。其他行为与 Type=simple 类似
相关参考
- 《Arch Linux WIKI》