【Linux】系统自定义系统级服务教程

概述
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 --查看服务是否开机自启

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值