Systemd综合使用手册
Last updated on August 22, 2023 pm
技术文档,避免遗忘。
配置文件目录
读取目录:/etc/systemd/system/
rpm包安装目录:/usr/lib/systemd/system/
系统信息
电源操作
1 |
|
系统状态
1 |
|
基础信息
1 |
|
用户信息
1 |
|
日志信息
1 |
|
Unit
系统资源
在systemd框架下,所有系统资源都被抽象成了“单元”(Unit),分12个大类:
- 硬件实体:
Device Unit:硬件设备
Mount Unit:文件系统的挂载点
Automount Unit:自动挂载点 - 文件实体:
Path Unit:文件或路径
Socket Unit:进程间通信的 socket
Swap Unit:swap 文件 - 服务实体:
Service unit:系统服务
Slice Unit:进程组
Target unit:多个Unit构成的一个组,一般为一个运行状态
Scope Unit:不是由 Systemd 启动的外部进程 - 系统管理:
Snapshot Unit:Systemd 快照,可以切回某个快照
Timer Unit:定时器
单元操作
获取信息
1 |
|
单元操作
1 |
|
Target
1 |
|
配置文件
配置文件信息
1 |
|
配置文件组成
基本规则
配置文件分成几个区块。
每个区块的第一行,是用方括号表示的区块名,比如[Unit]。配置文件的区块名和字段名,都是大小写敏感的。
每个区块内部是一些等号连接的键值对,其等号两侧不能有空格。
区块内容
[Unit]
[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。
- 元数据
Description:简短描述;
Documentation:文档地址; - 依赖关系
- 需求/冲突关系
Condition…:当前 Unit 运行必须满足的条件,否则不会运行;
Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行;
Assert…:当前 Unit 运行必须满足的条件,否则会报启动失败; - 强依赖
Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败;
Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败;
BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行; - 弱依赖
Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动;
After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动;
- 需求/冲突关系
[Install]
[Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。
- 元数据
Alias:当前 Unit 可用于启动的别名; - 依赖关系
WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中(强依赖);
RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中(弱依赖); - 启动关系
Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit;
[Service]
[Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。
进程类型
Type:定义启动时的进程行为;值:simple(默认值):ExecStart字段启动的进程为主进程;
forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程;
oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务;
dbus:类似于simple,但会等待 D-Bus 信号后启动;
notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务;
idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合;执行指令
所有的启动设置之前,都可以加上一个连词号(-),表示”抑制错误”,即发生错误的时候,不影响其他命令的执行。
ExecStart:启动当前服务的命令;
ExecStartPre:启动当前服务之前执行的命令;
ExecStartPost:启动当前服务之后执行的命令;
ExecReload:重启当前服务时执行的命令;
ExecStop:停止当前服务时执行的命令;
ExecStopPost:停止当其服务之后执行的命令;RuntimeDirectory:指定运行当前服务时的执行目录;
异常响应
RestartSec:自动重启当前服务间隔的秒数;
TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数;操作处理
KillMode:定义Systemd如何停止当前服务;值:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;
process:只杀主进程;
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;
none:没有进程会被杀掉,只是执行服务的 stop 命令;
Restart:定义何种情况 Systemd 会自动重启当前服务;值:
no(默认值):退出后不会重启;
on-success:只有正常退出时(退出状态码为0),才会重启;
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;
on-abnormal:只有被信号终止和超时,才会重启;
on-abort:只有在收到没有捕捉到的信号终止时,才会重启;
on-watchdog:超时退出,才会重启;
always:不管是什么退出原因,总是重启;
- 元数据
Environment:指定环境变量;