需求:
每一分钟监听指定java服务,判断服务是否正常启动
如果正常启动,不需要额外操作
如果发现服务没有启动,再次判断,累计5次判断失败则重启服务
shell脚本:
#!/bin/bash
# 指定Java服务的进程名或端口号
JAVA_SERVICE="yq-video"
JAVA_JAR="yq-video.jar"
DURATION=5
MAX_COUNT=5
FILE_PATH="/opt/check.log"
# 设置连续连接失败次数
FAIL_COUNT=0
while true; do
# 判断Java服务是否正常
PID=$(ps -ef | grep $JAVA_SERVICE | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
echo "service is success >>> 进程ID为:$PID" >> $FILE_PATH
FAIL_COUNT=0
else
# Java服务异常,增加失败次数
FAIL_COUNT=$((FAIL_COUNT+1))
echo "service is fail >>> 未找到Java服务进程:$FAIL_COUNT" >> $FILE_PATH
fi
# 如果连续5次连接不上,重启Java服务
if [ $FAIL_COUNT -ge $MAX_COUNT ]; then
echo "Java服务异常,正在重启:$FAIL_COUNT" >> $FILE_PATH
# nohup java -server -Xmx8144m -Xms8144m -Djava.io.tmpdir=/opt -jar $JAVA_JAR &
nohup java -server -Xmx512m -Xms512m -Djava.io.tmpdir=/opt -jar $JAVA_JAR &
# 重启后重置失败次数
FAIL_COUNT=0
fi
# 每分钟检查一次
sleep $DURATION
done
这里已经是有定时1分钟了
只要运行这个任务的进程不关闭,那么就可以一直运行下去
nohup sh /opt/app/dds_parking_check.sh &
另外一种,就是执行脚本只是判断走逻辑,不循环
通过定时器来改
crontab -e
增加
* * * * * /opt/app/check.sh
但是这种方式实际是不好实现的,因为并不清楚累计有多少次失败了
就是每分钟执行,检测到失败之后无法和上次操作进行结合