前言
最近在linux上部署一个服务,希望它在系统启动的时候自动启动。考虑将启动命令加入到/etc/rc.d/rc.local里面去,发现注解提示建议采用systemctl方式来代替实现。所以开始学习使用systemctl来创建自定义服务:实现了在系统启动的时候自动启动,并且在服务异常挂掉的情况下,自动重启服务。
Systemctl简介
Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。
创建自定义service
使用systemctl将自己的服务设置成系统服务方式比较简单,只需要一个配置文件就可以搞定,在/lib/systemd/system目录下面创建文件:consumer.service,文件格式如下:
[Unit]
Description=kafkaConsumer-1 service
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/opt/local/kafkaConsumerServer-1/startup.sh
ExecStop=/opt/local/kafkaConsumerServer-1/stop.sh
PrivateTmp=true
RestartSec=8
Restart=always
[Install]
WantedBy=multi-user.target
配置文件主要分为3大块:
【Unit】
主要包括服务说明,与其他服务的联动关系
Description:服务描述
After:在其他服务启动之后执行
Before:在其他服务之前执行
注:After和Before字段只涉及启动顺序,不涉及依赖关系
【Service】
是服务的一些具体运行参数的设置
Type:运行的形式,forking是后台运行的形式
PIDFile:存放PID的文件路径
ExecStart:启动的命令
ExecStop:停止的命令
PrivateTmp:True表示给服务分配独立的临时空间
Restart:自动重启
RestartSec:多少秒后重启
ExecReload:重启服务时执行的命令
ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令
注:执行命令全部要求使用绝对路径
【Install】
Install区块,定义如何安装这个配置文件
WantedBy:表示该服务所在的 Target,WantedBy=multi-user.target指的是:sshd 所在的 Target 是multi-user.target
运行自定义service
给service添加可执行权限
chmod 754 consumer.service
使用命令:
# 添加到系统开机启动服务
systemctl enable consumer.service
# 移除服务
systemctl disable consumer.service
# 启动服务
systemctl start consumer.service
# 停止服务
systemctl stop consumer.service
# 查看服务是否开启自启
systemctl is-enabled consumer.service