一个例子
1 | [Unit] |
各部分详解
Unit
[Unit]
Documentation 文档地址
Description 简短描述
Requires 当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
Wants 与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
BindsTo 与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
Before 如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
After 是指在那个服务后面启动,一般是网络服务启动后启动
Conflicts 这里指定的 Unit 不能与当前 Unit 同时运行
Condition… 当前 Unit 运行必须满足的条件,否则不会运行
Assert… 当前 Unit 运行必须满足的条件,否则会报启动失败
Service
[Service]
Type=forking 表示后台运行模式。
User=user 设置服务运行的用户
Group=user 设置服务运行的用户组
Restart=always 总是重启
RestartSec=1 重启等待的秒数
PrivateTmp=true 表示给服务分配独立的临时空间
Environment 指定环境变量
PIDFile 指定服务的PID文件
ExecStart 启动当前服务的命令
ExecStartPre 启动当前服务之前执行的命令
ExecStartPost 启动当前服务之后执行的命令
ExecReload 重启当前服务时执行的命令
ExecStop 停止当前服务时执行的命令
ExecStopPost 停止当其服务之后执行的命令
KillMode 当前控制组里的所有子进程,都会被杀掉
Type=simple 默认值,ExecStart字段启动的进程为主进程
forking ExecStart字段将以fork()方式启动
oneshot 类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务,会使Exex* 后面的命令支持 BASH 语法。
dbus 类似于simple,但会等待 D-Bus 信号后启动
notify 类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
idle 类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
Restart=no 默认值退出后不会重启
on-success 只有正常退出时(退出状态码为0),才会重启
on-failure 非正常退出时(非0),包括被信号终止和超时,才会重启
on-abnormal 只有被信号终止和超时,才会重启
on-abort 只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog 超时退出,才会重启
always 不管是什么退出原因,总是重启,但是不会重起 systemctl stop serviceName.service 命令停止后的服务。
KillMode=control-group 默认,当前控制组里的所有子进程,都会被杀掉
process 只杀主进程
mixed 主进程将收到SIGTERM信号,子进程收到SIGKILL信号
none 没有进程会被杀掉,只是执行服务的stop命令
Install
[Install]
通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。
WantedBy=multi-user.target # 多用户
WantedBy:它的值是一个或多个 Target,当前 Unit 激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中
RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
Alias:当前 Unit 可用于启动的别名
Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit
WantedBy字段:
WantedBy=multi-user.target 表示多用户命令行状态,这个设置很重要
graphical.target 表示图形用户状体,它依赖于multi-user.target
- 本文标题:Linux系统systemctl资料
- 创建时间:2021-09-19 19:12:05
- 本文链接:2021/09/19/Linux系统systemctl资料/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!