某些项目 直接通过 java -jar xxxx.jar 启动一个接口服务,一般情况下也没什么问题,但是服务有bug ,不定时 出现接口返回异常,重启服务后又恢复正常,在开发人员没有修复上线之前,每次只能手动去重启,非常不方便
写个脚本自动去检测,检测到异常就自动重启一下,并钉钉机器人通知一下
需要使用请自行修改相关路径,和各类名字,做参考
创建一个jar_check.sh 用于检测
#!/bin/sh
# 获取xxxxx.jar的PID
XXXX_PID=$(ps -ef | grep xxxx.jar | grep -v 'grep' |awk '{print $2}')
# 项目启动命令
START_JAR=/data/tart_xxxx.sh
# 需要监测的一个GET请求地址
MONITOR_URL=https://127.0.0.1:8080/api?status=?
# 监测日志输出路径
XXXX_MONITOR_LOG=/data/xxxxMonitor.log
Monitor()
{
# 输出时间,注意date后有个空格
echo "[$(date +'%F %H:%M:%S')]-[info]开始监控"
# 判断PID是否存在,如不存在说明进程已关闭,注意[]前后,变量前后,都要有空格
if [[ $XXXX_PID ]];then
echo "[$(date +'%F %H:%M:%S')]-[info]当前xxxx的PID为: $XXXX_PID 进程存在,检测接口返回是否正常"
# 向监测的地址发送请求并获取响应码
HTTP_REPONSE_STATUS=$(curl -s "$MONITOR_URL" | awk -F '"' '{print$50}')
# 如果响应码为【操作成功】证明在正常启用
if [[ $HTTP_REPONSE_STATUS = 操作成功 ]];then
echo "[$(date +'%F %H:%M:%S')]-[info]接口返回: $HTTP_REPONSE_STATUS |系统目前正常"
else
echo "[$(date +'%F %H:%M:%S')]-[error]系统返回: $HTTP_REPONSE_STATUS |系统异常开始重启"
sh /data/dingding.sh
# 结束进程
kill -9 $LDDW_PID
# 5秒后重启
sleep 5
sh $START_JAR
fi
else
echo "[$(date +'%F %H:%M:%S')]-[error]进程不存在,开始启动"
sh /data/dingding.sh
sh $START_JAR
fi
echo "[$(date +'%F %H:%M:%S')]-[info]监测执行完成,等待下一次检测"
echo " "
}
# 输出到指定文件中
Monitor>>$XXXX_MONITOR_LOG
插件一个 start_xxxx.sh 用于启动jar包
#!/bin/sh
nohup java -jar /data/xxxx.jar > /data/xxxx.out 2>&1 &
创建一个 dingding.sh 用于 发送 钉钉提醒
curl 'https://oapi.dingtalk.com/robot/send?access_token=输入自己的机器人token' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
"text": {
"content": "检测到 xxxxx程序异常,正在重启中。。。请注意服务是否正常"
}
}'