Systemd相关文件
- /usr/lib/systemd/system/xx.service 配置文件
命令举例
- 开机自启动
1
systemctl enable httpd
- 启动服务
1
systemctl start httpd
- 查看服务状态
1
systemctl status httpd
- 停止服务
1
systemctl stop httpd
- 加载配置文件
1
systemctl daemon-reload
- 重启服务
1
systemctl restart httpd
- 列出Target包含的服务
1 2
# 查看 multi-user.target 包含的所有服务 systemctl list-dependencies multi-user.target
- 切换Target
1 2 3
切换到另一个 target # shutdown.target 就是关机状态 systemctl isolate shutdown.target
- 列出所有活动的,类型是service的单元(Unit)
1
systemctl list-units --type=service
- 列出所有配置文件
|
|
- 列出所有配置文件, unit状态为enabled
|
|
服务配置文件
配置文件所在目录:主要放在/usr/lib/systemd/system
目录,也可能在/etc/systemd/system
目录。
以配置文件sshd.service
举例
|
|
[Unit]区块: 启动顺序、依赖关系
Description: 给出当前服务的简单描述
Documentation: 给出文档位置
After: 表示如果network.target
或sshd-keygen.service
需要启动,那么当前服务sshd.service
应该在它们之后启动。
Before: 定义服务应该在哪些服务之前启动。
After和Before字段只涉及启动顺序,不涉及依赖关系。
Wants: 设置弱依赖关系。比如Wants=sshd-keygen.service
表示服务与sshd-keygen.service
之间存在"弱依赖"关系,即如果sshd-keygen.service
启动失败或停止运行,不影响当前服务继续执行。
Requires: 设置强依赖关系,即如果配置的服务启动失败或异常退出,那么当前也必须退出。
Wants字段与Requires字段只涉及依赖关系,与启动顺序无关。
[Service]区块:启动行为
Service区块定义如何启动当前服务。
启动命令
EnvironmentFile:指定当前服务的环境参数文件。该文件内部的key=value
键值对,可以用$key的形式,在当前配置文件中获取。
ExecStart:定义启动进程时执行的命令(参数可用$key的形式,在EnvironmentFile
配置的文件中获取)。
ExecReload\ExecStop\ExecStartPre\ExecStartPost\ExecStopPost: 重启\停止\启动之前\启动之后\停止之后赋值是加连词号
-
,表示抑制错误,即发生错误时不影响其他命令执行。例如EnvironmentFile=-/etc/sysconfig/sshd
,当文件不存在时,不影响后续ExecStart执行启动类型
Type: 定义启动类型。Type字段值 说明 simple(默认值) ExecStart字段启动的进程为主进程 forking ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程 oneshot 类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务 dbus 类似于simple,但会等待 D-Bus 信号后启动 notify 类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务 idle 类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合 重启行为
KillMode: 定义 Systemd 如何停止服务。
KillMode字段值 | 说明 |
---|---|
control-group(默认值) | 当前控制组里面的所有子进程,都会被杀掉 |
process | 只杀主进程 |
mixed | 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 |
none | 没有进程会被杀掉,只是执行服务的 stop 命令 |
Restart: 定义了服务退出后,Systemd 的重启方式。
守护进程,推荐设置
on-failure
; 允许发生错误退出的服务,可设置on-abnormal
Restart字段值 | 说明 |
---|---|
no(默认值) | 退出后不会重启 |
on-success | 只有正常退出时(退出状态码为0), 才会重启 |
on-failure | 非正常退出时(退出状态码非0), 包括被信号终止和超时, 才会重启 |
on-abnormal | 只有被信号终止和超时,才会重启 |
on-abort | 只有在收到没有捕捉到的信号终止时,才会重启 |
on-watchdog | 超时退出,才会重启 |
always | 不管是什么退出原因,总是重启 |
RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。
[Install]区块
定义如何安装当前配置文件,即
systemctl enable
命令执行时,将当前配置文件拷贝至哪里(/etc/systemd/system/[Target|WantedBy设置].wants/
)。
WantedBy字段:表示该服务所在的 Target。例如WantedBy=multi-user.target
指的是,服务所在的Target
是multi-user.target。
这个设置非常重要,因为执行
systemctl enable sshd.service
命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。
Target
Target: 表示一组服务。Systemd默认的启动Target是multi-user.target
。在这个组里的所有服务,都将开机启动。
可执行命令查看
|
|
一般来说,常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。官方文档有一张非常清晰的 Target 依赖
multi-user.target
配置文件内容如下:
|
|
Requires:要求basic.target一起运行。
Conflicts:冲突字段。如果rescue.service
或rescue.target
正在运行,multi-user.target
就不能运行,反之亦然。
After:表示multi-user.target
在basic.target
rescue.service
rescue.target
之后启动,如果它们有启动的话。
AllowIsolate:允许使用systemctl isolate
命令切换到当前Targetmulti-user.target
。