Linux系统使用service设置程序自启动
- 整体描述
- 前期准备
- 1. 生成pid文件
- 具体方法
- 1. 脚本编写
- 1.1 start.sh脚本
- 1.2 shutdown.sh脚本
- 1.3 restart.sh脚本
- 2. 设置service
- 2.1 service文件
- 2.2 设置自启动
- 2.3 查看设置结果
整体描述
在linux系统里,设置程序自启动是基本操作,我们可以自己写一个service文件,设置自己的程序自启动参数。这里用springboot的jar包程序做示例。
前期准备
1. 生成pid文件
程序启动和杀死依赖pid文件,之前写过一个生成pid文件的文章:链接:在Springboot框架生成pid文件,可以参考一下。
具体方法
目前需要的脚本有3个,其中两个是给系统添加service用的,分别为start.sh和shutdown.sh,还有一个是杀死当前执行java进程的,这个只需要杀死进程就行,不需要写启动的命令,启动是再系统service里完成的。
1. 脚本编写
1.1 start.sh脚本
ldconfig
source ~/.bashrc
nohup java -jar test.jar &
1.2 shutdown.sh脚本
ID=`ps -ef | grep "test.jar" | grep -v grep | awk '{print $2}'`
if [ ! -n "$ID" ] ;then
echo "no process running"
else
kill -9 ${ID}
echo "kill process ${ID}"
fi
1.3 restart.sh脚本
restart脚本只需要kill掉进程即可。
JAR_NAME="test.jar"
APP_NAME="test"
PIDFile=/var/run/${APP_NAME}.pid
ldconfig
source ~/.bashrc
if [ -f $PIDFile ] ;then
PID=`cat $PIDFile`
else
PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print $2}'`
fi
if [ ! -n "$PID" ] ;then
echo "no ${APP_NAME} process running"
else
kill -9 ${PID}
echo "kill ${APP_NAME} process ${PID}"
fi
for a in {1..100}
do
PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print $2}'`
if [ ! -n "$PID" ] ;then
echo "${JAR_NAME} has stopped."
break
else
echo "${JAR_NAME} is stopping."
sleep 2
fi
done
export LANG=zh_CN.UTF-8
sleep 5
for a in {1..100}
do
PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | awk '{print $2}'`
if [ ! -n "$PID" ] ;then
echo "${APP_NAME} is starting."
sleep 2
else
echo "${APP_NAME} start successed, pid= ${PID}"
break
fi
done
2. 设置service
2.1 service文件
系统的service在/usr/lib/systemd/system目录下,新建一个test.service的文件:
[Unit]
Description=test
[Service]
#Type=simple
PIDFile=/var/run/test.pid
ExecStart=/app/test/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=false
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
2.2 设置自启动
systemctl enable test
2.3 查看设置结果
systemctl status test
看到如下则表示启动成功: