#第一版
#!/bin/bash
echo "Restarting xxx Application"
pid=`ps -ef | grep xxx | grep -v grep | awk '{print $2}'`
echo "$pid"
# 设置最大检查次数
max_checks=5
# 检查计数器
checks=0
while [ $checks -lt $max_checks ]; do
if lsof -i :8029 > /dev/null
then
echo "Port 8029 is in use. Restarting xxx."
kill -9 $pid
echo "closed process" $pid
else
nohup java -jar xxx.jar > iot.log 2>&1 &
sleep 15
echo "检查第一次后台运行 xxx是否成功."
if lsof -i :8029 > /dev/null; then
echo "First restarted xxx."
break
else
nohup java -jar xxx.jar > iot.log 2>&1 &
sleep 15
if lsof -i :8029 > /dev/null; then
echo "Second restarted xxx."
break
else
nohup java -jar xxx.jar > iot.log 2>&1 &
# 一旦成功启动,跳出循循环
echo "Third break"
break
fi
fi
fi
checks=$((checks + 1))
sleep 2 # 休眠 2 秒后再次检查
done
if [ $checks -eq $max_checks ]; then
echo $max_checks "reached"
fi
## 改进版
#!/bin/bash
echo "Restarting xxx Application"
pid=`ps -ef | grep xxx | grep -v grep | awk '{print $2}'`
echo "$pid"
kill -9 $pid
#nohup java -jar xxx.jar > iot.log 2>&1 &
pm2 start xxx
sleep 15
# 设置最大检查次数
max_checks=5
# 检查计数器
checks=0
while [ $checks -lt $max_checks ]; do
if ps -ef | grep 'xxx' | grep -v grep > /dev/null; then
if lsof -i :8029 > /dev/null
then
echo "第: $checks 次检查xxx,已经后台启动."
else
pid=`ps -ef | grep xxx | grep -v grep | awk '{print $2}'`
kill -9 $pid
#nohup java -jar xxx.jar > iot.log 2>&1 &
pm2 start xxx
echo "第: $checks 次检查;上一次启动失败,再次重启xxx需15s"
sleep 15
fi
fi
checks=$((checks + 1))
done
if [ $checks -eq $max_checks ]; then
echo 第: $max_checks 次"reached"
fi