shell+钉钉机器人完成java程序中断后自启动和实时监控

java实时程序在运行过程中偶尔出现异常信息中断的情况,通过shell脚本即可完成自启动。

以下为监控一个实时的java程序的shell脚本。

通过每10秒检查一次java程序的进程,来判断程序是否处于运行中。如果未发现程序,则执行程序的启动脚本。

对于启动过程中的状态信息,会通过钉钉机器人实时发送到监控群中,让维护人员了解到程序的异常。

在脚本中通过maxRetry来设置最大尝试的次数。

#!/bin/sh

#=============== java程序 begin ====================#
  function callJavaProgram(){
    nohup java -Djava.ext.dirs=lib com.Testjava 2>&1 &
  }
#=============== java程序 end =======================#


#=============== 发送钉钉的消息 begin ================#
# 注意: ${nowtime}对应的日期参数不能有空格
# 注意: ${programe}为执行的jar程序的主程序名
url='https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
programe=TestJava
server=192.168.0.101
content=''
logfile=testjava.log

function sendDingtalk(){
  java -Djava.ext.dirs=/home/hadoop/shell/robot/lib com.DingtalkRobot \
  ${1} ${2} ${3} ${4} ${5}
}
#sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content}
#=============== 发送钉钉的消息 end ==================#


# 最大尝试次数
maxRetry=3
# 尝试次数计数器
retryTimes=0

(
while true;
do
  # 检测java程序执行的进程个数,如果小于1,则未启动
  count=`ps -ef | grep ${programe} | grep -v grep|wc -l`
  #echo '进程个数:'$count >> ${logfile}
  nowtime=`date --date='0 days ago' "+%Y-%m-%d_%H:%M:%S"`

  if [ ${count} -lt 1 ]; then

    retryTimes=$[$retryTimes+1]

    content='检测到程序【'${programe}'】未启动,正在尝试启动......第'"${retryTimes}"'次'
    echo ${nowtime} ${content} >> ${logfile}
    sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content}

    if [ $retryTimes -ge $maxRetry ]; then
        content='检测到程序【'${programe}'】异常,尝试启动'"${maxRetry}"'次失败,程序退出,请手工解决'
        echo ${content} >> ${logfile}
        sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content}
        break
    fi

    #============== 这里执行java程序 =========================#
    callJavaProgram
    #============== 这里执行java程序 =========================#

  else
     if [ $retryTimes -gt 0 ]; then
        content='程序【'${programe}'】启动成功......第'"${retryTimes}"'次'
        echo ${content} >> ${logfile}
        sendDingtalk ${url} ${programe} ${server} ${nowtime} ${content}
     else
        echo ${nowtime} '程序【'${programe}'】......正在运行中' >> ${logfile}
     fi
     let retryTimes=0
  fi

  sleep 10

done
) & >> shell.log

脚本启动后:

可以查看到钉钉群中实时监控信息:

程序启动成功后,提示以下信息:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值