shell 脚本检测jar 包接口服务异常 自动重启

发布于 21 天前  22 次阅读


某些项目 直接通过 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程序异常,正在重启中。。。请注意服务是否正常"
    }
   }'

因为喜欢所以折腾。。。