使用systemd管理程序进程

下面是zk的管理脚本

vim /usr/lib/systemd/system/zookeeper.service

添加以下内容

[Unit]
Description=zookeeper
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/apache-zookeeper-3.6.2-bin/bin/zkServer.sh start
ExecReload=/usr/local/apache-zookeeper-3.6.2-bin/bin/zkServer.sh restart
ExecStop=/usr/local/apache-zookeeper-3.6.2-bin/bin/zkServer.sh stop
[Install]
WantedBy=multi-user.target  

section文件内容讲解

[Unit] 区块部分

描述,启动顺序与依赖关系

键值功能描述
Description 当前服务的简单描述
Documentation 文档位置
After (非依赖)启动顺序,其他服务启动后,本程序启动
Before (非依赖)启动顺序,本程序启动后,再启动其他服务
Wants (弱依赖),其他程序启动失败或停止运行,不影响本程序继续执行
Requires (强依赖),其他程序启动失败或停止运行,本程序也必须退出

 

 

 

 

 

 

 

 

[Service] 区块说明

定义如何启动当前服务

键值功能描述
Type 定义启动类型
ExecStartPre 启动服务之前执行的命令
ExecStart 启动进程时执行的命令
ExecStartPost 启动服务之后执行的命令
ExecReload 重启服务时执行的命令
ExecStop 停止服务时执行的命令
ExecStopPost 停止服务之后执行的命令
Restart 守护进程,当服务进程正常退出、异常退出、被杀死、超时的时候, 是否重新启动该服务。
RestartSec 服务重启之间,等待的秒数
TimeoutStartSec 服务允许的最大启动时长
TimeoutStopSec 服务允许的最大停止时长
TimeoutSe 同时设置TimeoutStartSecTimeoutStopSec
KillMode 服务停止时,杀死进程的方法
PrivateTmp 服务启动时在/tmp目录中生成缓存目录
LimitNOFILE 最大打开文件数


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[Install] 区块说明

定义如何安装这个配置文件,即怎样做到开机启动。

键值功能描述
WantedBy 表示该服务所在的 Target.默认填写(multi-user.target)运行级别3命令行模式,5图形界面模式

 

 

 

其中service 中的Type取值如下:

类型功能描述
simple (默认值)ExecStart字段启动的进程为主进程
forking ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
oneshot 类似于simple,但只执行一次,Systemd会等它执行完,才启动其他服务
dbus 类似于simple,但会等待D-Bus信号后启动
notify 类似于simple,启动结束后会发出通知信号,然后Systemd再启动其他服务
idle 类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

 

 

 

 

 

 

 

 

Restart 的参数如下:

类型功能描述
no (默认值)退出后不会重启
on-success 只有正常退出时(退出状态码为0),才会重启
on-failure 非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal 只有被信号终止和超时,才会重启
on-abort 只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog 超时退出,才会重启
always 不管是什么退出原因,总是重启

 

 

 

 

 

 

 

 

 

对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal

KillMode的参数如下:

类型功能描述
control-group (默认值)当前控制组里面的所有子进程,都会被结束
process 只杀主进程
mixed 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none 没有进程会被杀掉,只是执行服务的 stop 命令

 

 

 

 

 

 

posted on 2021-03-17 17:09  EZgod  阅读(134)  评论(0编辑  收藏  举报