概述

对于系统中的每一个单元(unit)都有一个配置文件,用于指示systemd如何启动或停止这个单元。

配置文件格式

systemd networkd 配置 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》