场景
- 方便运维
- 自动重启,可用于程序莫名其妙的退出,影响客户使用体验
详细步骤
简单点把下面三个文件和程序放在同一个目录,并执行shell文件bash install_service.sh
。
- 核心Shell文件
demo.sh
书写start, stop, restart, status
每个动作要执行的命令
#!/bin/bash
#desc: project demo service shell
#author: Kenny Fang
#since: 0.0.1
SERVICE_NAME=demo
PATH_CURR=$(pwd)
PID_PATH=/var/run/$SERVICE_NAME
PID_FILE=$PID_PATH/$SERVICE_NAME.pid
start() {
mkdir -p $PID_PATH
#do not excute cd command if program is in the same directory
#cd program_path
nohup java -jar demo.jar >>demo.log 2>&1 &
echo $! > $PID_FILE
echo $SERVICE_NAME started at pid: $!...
echo $PID_FILE
}
stop() {
PID=`cat $PID_FILE`
kill $PID
echo $SERVICE_NAME stoped at pid: $PID...
#rm -rf $PID_FILE
}
restart() {
stop;
start;
}
status() {
if [ -f $PID_FILE ];then
PID=`cat $PID_FILE`
echo $SERVICE_NAME is running at pid: $PID...
else
echo $SERVICE_NAME is not running
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Usage:{start|stop|restart|status}"
;;
esac
- 服务配置文件
demo.service
注意SHELL_PATH/demo.sh
是真实的Shell文件的绝对路径
[Unit]
Description= project demo
[Service]
Type=forking
PIDFile=/var/run/demo/demo.pid
ExecStart=SHELL_PATH/demo.sh start
ExecReload=SHELL_PATH/demo.sh restart
ExecStop=SHELL_PATH/demo.sh stop
PrivateTmp=true
Restart=always
[Install]
WantedBy=multi-user.target
- 服务安装文件
install_service.sh
#!/bin/bash
SERVICE_NAME=demo
PATH_CURR=$(pwd)
cd /usr/lib/systemd/system
ln -s $PATH_CURR/$SERVICE_NAME.service
- 使用服务
service demo status
或
systemctl status demo
● demo.service - project demo
Loaded: loaded (/yourpath/demo.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-08-02 16:50:21 CST; 19h ago
Process: 26354 ExecStop=SHELL_PATH/demo.sh stop (code=exited, status=0/SUCCESS)
Process: 26354 ExecStart=SHELL_PATH/demo.sh start (code=exited, status=0/SUCCESS)
Main PID: 26354 (java)
Tasks: 33
Memory: 0.3G
CGroup: /system.slice/demo.service
└─26354 java -jar demo.jar
Aug 02 16:50:21 zuf66589vyznm7f5fw8tg systemd[1]: Starting project demo...
Aug 02 16:50:21 zuf66589vyznm7f5fw8tg demo.sh[16351]: demo started at pid: 26354...
Aug 02 16:50:21 zuf66589vyznm7f5fw8tg demo.sh[16351]: /var/run/demo/demo.pid
Aug 02 16:50:21 zuf66589vyznm7f5fw8tg systemd[1]: Started project demo