概述
systemctl是一个系统软件服务的管理工具,可以用于启动、停止、重启和重新加载服务,查看服务状态以及设置默认启动级别等。它还可以管理服务之间的依赖关系,定制服务配置,并对服务的日志进行管理
服务组成部分
service文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项,用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项,此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项
Unit部分
可选项 描述
Description 对当前服务的简单描述
After 可以指定在哪些服务之后进行启动
Before 可以指定在哪些服务之前进行启动
Requires 可以指定服务依赖于哪些服务(这种依赖是"强依赖",一旦所依赖的服务异常,当前的服务也随之停止)
Wants 可以指定服务依赖于哪些服务(这种依赖是"弱依赖",即使所依赖的服务的启动情况不影响当前的服务是否启动)
Conflicts 定义units间的冲突关系
Service部分
可选项 描述
EnvironmentFile 环境配置文件,用来指定当前服务启动的环境变量
ExecStart 指定服务启动时执行的命令或脚本
ExecStartPre 指定服务启动前执行的命令或脚本
ExecStartPost 指定服务启动后执行的命令或脚本
ExecStop 指明停止服务要运行的命令或脚本
ExecStopPost 指定服务停止之后执行的命令或脚本
RestartSec 指定服务在重启时等待的时间,单位为秒
ExecReload 指明重启服务要运行的命令或脚本
Restart 当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务,具体看下列类型
PrivateTmp 设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
KillMode 指定停止的方式,具体见下面
Restart 指定重启时的类型,具体见下面
Type 指定启动类型,具体见下面
Type的可选值
Type可选项 描述
simple 指定ExecStart字段的进程为主进程
forking 指定以fork() 子进程执行ExecStart字段的进程
oneshot 执行一次
notify 启动后发送会发送通知信号通知systemd
idle 等其他任务结束后才运行
Restart的可选值
Restart可选项 描述
no 退出后不会重启
on-success 当进程正常退出时(退出码为0) 执行重启
on-failure 当进程不正常退出时(退出码不为0) 执行重启
on-abnormal 当被信号终止和超时执行重启
on-abort 当收到没有捕捉到的信号终止时执行重启
on-watchdog 当看门狗超时时执行重启
always 一直重启
KillMode可选值
KillMode可选项 描述
control-group 杀掉当前进程中所有的进程
process 杀掉当前进程的主进程
mixed 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none 不杀掉任何进程
Install部分
Install可选项 描述
Alias 别名,可使用systemctl command Alias.service
RequiredBy 被哪些units所依赖,强依赖
WantedBy 被哪些units所依赖,弱依赖
Also 安装本服务的时候还要安装别的相关服务
Install 一般填为WantedBy=multi-user.target
注意:
对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启,使用命令 systemctl daemon-reload
实例
下面是名称为test的脚本文件,包含启动、停止、重启、查看状态等动作,存放路径:/etc/init.d
#! /bin/bash
# chkconfig: 2345 20 81
# chkconfig --add test --level 2345
# Description: test service
start() {
... --支持自定义
}
stop() {
... --支持自定义
}
status() {
... --支持自定义
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
创建服务文件 test.service,存放路径:/etc/systemd/system
[Unit]
Description=test service
After=network.target
[Service]
Type=simple
ExecStart=/etc/init.d/test start
ExecReload=/etc/init.d/test restart
ExecStop=/etc/init.d/test stop
RemainAfterExit=yes
Restart=on-failure
User=root
Group=root
WorkingDirectory=/etc/init.d
[Install]
WantedBy=multi-user.target
至此,完整的系统级服务创建完成,以下汇总了常用命令,仅供参考:
systemctl enable test --开机自启 test 服务
systemctl disable test --关闭开机自启 test 服务
systemctl daemon-reload --服务文件生效
systemctl start test --启动 test 服务
systemctl status test --查 test 服务状态
systemctl stop test --停止 test 服务
systemctl restart test --重启 test 服务
systemctl list-units --type service --all --查看所有服务
systemctl is-enabled name.service --查看服务是否开机自启

1万+

被折叠的 条评论
为什么被折叠?



