centos7添加自定义服务到systemctl
工作中部署的开源软件很多需要进到程序的bin目录执行start,每次都需要进入目录,而且不便于管理。将这类服务或者自开发的程序添加到systemctl管理起来就方便很多。
一、systemd配置文件
systemd 默认从目录/etc/systemd/system/读取配置文件,但里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的脚本存放在这个目录。
systemctl enable 命令用于在上面两个目录之间,建立符号链接关系。
/usr/lib/systemd/下有系统(system)和用户(user)之分,需要开机启动的服务放在/usr/lib/systemd/system目录下.
CentOS7的每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]
[Unit]部分主要是对这个服务的说明
Description 用于描述服务
After 用于描述服务类别
[Service]是服务的一些具体运行参数的设置.
Type=forking 是后台运行的形式,
User=users 是设置服务运行的用户,
Group=users 是设置服务运行的用户组,
PIDFile 为存放PID的文件路径,
ExecStart 为服务的具体运行命令,
ExecReload 为重启命令,
ExecStop 为停止命令,
PrivateTmp=True 表示给服务分配独立的临时空间
注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
[Install]是服务安装的相关设置,可设置为多用户
二、示例
添加厂商服务
tomcat
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=java tomcat project
After=tomcat.service
[Service]
Type=forking
User=users
Group=users
PIDFile=/usr/local/tomcat/tomcat.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecReload=
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /usr/lib/systemd/system/tomcat.service
systemctl enable tomcat.service
systemctl is-active tomcat.service
systemctl status tomcat.service
添加自开发服务
和厂商服务一样只是自开发服务需要自己写好启动脚本和关闭脚本
启动脚本
vim /home/services/mytestsvr-service/start.sh
#!/bin/sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
cd /home/services/mytestsvr-service
java -jar ./lib/mytestsvr-service.jar &
echo $! > /var/run/mytestsvr-service.pid
关闭脚本
vim /home/services/mytestsvr-service/stop.sh
#!/bin/sh
PID=$(cat /var/run/mytestsvr-service.pid)
kill -9 $PID
systemctl脚本
vim /usr/lib/systemd/system/**mytestsvr**.service
[Unit]
Description=the service description
After=network.target
[Service]
Type=forking
ExecStart=/home/services/mytestsvr-service/start.sh
ExecStop=/home/services/mytestsvr-service/stop.sh
[Install]
WantedBy=multi-user.target
chmod 754 /usr/lib/systemd/system/mytestsvr.service
systemctl enable mytestsvr.service
systemctl is-active mytestsvr.service
systemctl status mytestsvr.service