java實時程序在運行過程當中偶爾出現異常信息中斷的狀況,經過shell腳本便可完成自啓動。java
如下爲監控一個實時的java程序的shell腳本。shell
經過每10秒檢查一次java程序的進程,來判斷程序是否處於運行中。若是未發現程序,則執行程序的啓動腳本。api
對於啓動過程當中的狀態信息,會經過釘釘機器人實時發送到監控羣中,讓維護人員瞭解到程序的異常。oop
在腳本中經過maxRetry來設置最大嘗試的次數。url
#!/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
腳本啓動後:spa
能夠查看到釘釘羣中實時監控信息:code
程序啓動成功後,提示如下信息:server