以docker.service为例,说明各个参数的含义:
[Unit] #主要用于配置整个服务的详情信息以及服务依赖,用于快速识别该服务的相关情况以及依赖项目
Description=Docker Application Container Engine #服务的简单描述
Documentation=https://docs.docker.com #指定服务的文档,便于管理员快速追溯
BindsTo=containerd.service #和Requires类似,但是依赖性更强,这里列出来的任何服务停止运行或崩溃,该服务将立即被停止。考虑服务的启动依赖,一般会和After一起使用
After=network-online.target firewalld.service #用于指定该服务在那些服务之后启动 ,停止时正好相反
Wants=network-online.target #Requires的弱化版,当该服务启动时,尽可能的启动该指令指定的服务,但不会影响该服务的启动
#Before #用于指定该服务在那些服务之前启动,停止时正好相反
#Requires #设置该服务必须依赖的其他服务,因此在该服务启动之前,指定的服务列表必须全部在线,否则服务将启动失败或掉线。但如果未设置After和Before指令时,该服务和依赖的服务将会并行的同时启动。注意: 该指令依赖的服务不一定要在整个生命周期都保持一直在线,这取决于其他的检查条件
#Requisite #和Requires类似,区别是在该服务启动时,该指令指定的依赖资源必须全部处于启动成功的状态,否则该服务立马失败,并且不会启动那些失败的依赖服务。因此一般建议Requisite和After 一起联合使用会比较好。
#PartOf #和Requires类似,但仅作用于服务的停止和重启,表示该服务是所列服务的一部分,会随指定服务的启动而启动。注意: 该指令是单向依赖,服务的主动的重启不会影响其他
[Service] #主要用于配置整个服务生命周期的管理行为
Type=notify #设置进程的启动类型。必须设为 simple, exec, forking, oneshot, dbus, notify, idle 之一
#具体见 “http://www.jinbuguo.com/systemd/systemd.service.html#”
EnvironmentFile=-/etc/sysconfig/docker #指定包含key=value的配置文件 -$(filename)表示可忽略,即当文件不存在或环境变量加载失败时也不影响后续的处理逻辑。
#Environment #指定Key=Value 的环境配置
#进程生命周期管理
ExecStart=/usr/bin/dockerd -H unix:// $DOCKER_OPTS #启动逻辑, 该指令用于启动进程的核心逻辑
ExecReload=/bin/kill -s HUP $MAINPID #热加载, 该指令用于对进程进行热加载,通常情况用于 配置变更后的热重启
#重启策略
TimeoutSec=0 #一个同时设置 TimeoutStartSec= 与 TimeoutStopSec= 的快捷方式。
RestartSec=2 #多久后重启
Restart=always #当服务进程正常退出、异常退出、被杀死、超时的时候,是否重新启动该服务。always无条件重启
StartLimitBurst=3 #启动的最大次数限制,超过后停止继续重启
StartLimitInterval=60s #启动时间的最大间隔
#资源限制
LimitNOFILE=infinity #限制进程使用的文件描述符数量,等同ulimit -n
LimitNPROC=infinity #限制进程的数量,等同于ulimit -u
LimitCORE=infinity #???
TasksMax=infinity
Delegate=yes
KillMode=process #设置在单元停止时,杀死进程的方法。process 表示仅杀死主进程。
[Install] #用于配置服务的安装级别,当我们设置服务在Linux的那种级别下启动或开机自启动时会加载该部分(典型的当chkconfig Nginx on或者systemctl enable|disable Nginx.service时会读取该部分的配置)
WantedBy=multi-user.target #设置启用服务的依赖服务
参考链接:
https://bgbiao.top/post/systemd-doc/
http://www.jinbuguo.com/systemd/systemd.index.html