shell 脚本重启 java 服务
虽然刚开始的时候敲命令感觉挺有趣的,但是时间长了还是感觉麻烦。
因此编写了一个简易的重启服务脚本。
不得不说,为了编写这个脚本,虽然有各类文章参考,但还是废了很大的劲,毕竟第一次编写。
最大的一个坑就是使用命令直接执行和使用 shell + 参数执行得到的结果不一致!
最终还是排除掉脚本本身得到了正确答案。
停止服务的脚本如下:
#!/bin/bash
# stop.sh
# author kfyty
pCount=`ps -ef | grep "$*" | grep -v $0 | grep -v grep | wc -l`
pPid=`ps -ef | grep "$*" | grep -v $0 | grep -v grep | awk '{print $2}'`
if [ $pCount -gt 1 ]; then
echo "more than one service[$*] found, please try again"
exit 1
elif [ $pCount -eq 0 ]; then
echo "no service[$*] running"
else
if [ ! -n "$pPid" ]; then
echo "service[$*] pid not found"
exit 1
else
kill $pPid
sec=1
for i in {1..60};
do
sleep $sec
pPid=`ps -ef | grep "$*" | grep -v $0 | grep -v grep | awk '{print $2}'`
if [ ! -n "$pPid" ]; then
echo "kill service[$*] success"
break
fi
done
fi
fi
pPid=`ps -ef | grep "$*" | grep -v $0 | grep -v grep | awk '{print $2}'`
if [ -n "$pPid" ]; then
echo "kill service[$*] failed"
exit 1
fi
重启的脚本如下:
#!/bin/bash
# restart.sh
# author kfyty
source ./stop.sh $*
log=$1
jarArgs="-jar"
if [[ $* == *$jarArgs* ]]; then
nohup $* > nohup.out 2>&1 &
else
nohup java -jar $* > ${log%.jar}.log 2>&1 &
fi
pPid=`ps -ef | grep -w "$1" | grep -v $0 | grep -v grep | awk '{print $2}'`
if [ -n "$pPid" ]; then
echo "start service[$*] success"
else
echo "start service[$*] failed"
fi
使用方式:
sh restart.sh service.jar --args1 --args2
./restart.sh service.jar --args1 --args2
./restart.sh java -jar service.jar --args1 --args2