Linux上監控Tomcat Down掉後自動重啟Tomcat

翻身碼農把歌唱發表於2018-07-21

tomcat執行一段時間後,凌晨無緣無故掛掉,看了tomcat日誌、專案日誌、系統日誌,沒有發現錯誤。於是想到寫一個shell指令碼,每隔2分鐘監控一次tomcat 的狀態,若掛掉,則重新啟動。解決方案參考網路,同時修改成符合自己的指令碼。

使用環境

  • 作業系統:CentOS 7
  • JDK版本:1.8.0_161-b12 64位
  • Tomcat版本:8.5.29

編寫指令碼

在win下新建:monitor.sh,內容如下:

#!/bin/sh
# function:自動監控tomcat程式,掛了就執行重啟操作
# DEFINE
# 環境變數
export JAVA_HOME=/usr/local/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 獲取tomcat PID,要加上grep java,否則會列印多個程式ID
TomcatID=$(ps -ef | grep java |grep tomcat |grep -w 'apache-tomcat-8.5.29_2'|grep -v 'grep'|awk '{print $2}')
# tomcat_startup
StartTomcat=`nohup /usr/local/apache-tomcat-8.5.29_2/bin/startup.sh &`
TomcatCache=usr/local/apache-tomcat-8.5.29_2/work
# 定義要監控的頁面地址
WebUrl=http://127.0.0.1:8080/xxxxx/monitor
# 日誌輸出
GetPageInfo=/dev/null
TomcatMonitorLog=/tmp/TomcatMonitor.log
Monitor()
{
  echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')],程式ID:$TomcatID."
  if [ "$TomcatID" != "" ];then
    echo "[info]tomcat程式ID為:$TomcatID."
    # 獲取返回狀態碼
    TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
    if [ $TomcatServiceCode -eq 200 ];then
        echo "[info]返回碼為$TomcatServiceCode,tomcat處於running狀態."
    else
        echo "[error]訪問出錯,狀態碼為$TomcatServiceCode,錯誤日誌已輸出到$GetPageInfo"
        echo "[error]開始重啟tomca,kill前程式id為:$TomcatID"
		kill -9 $TomcatID  # 殺掉原tomcat程式	
        sleep 3
        rm -rf $TomcatCache # 清理tomcat快取
        $StartTomcat
		echo "[info] tomcat啟動成功."
    fi
  else
    echo "[error]程式不存在!tomcat自動重啟..."
    echo "[info]$StartTomcat,請稍候......"
    rm -rf $TomcatCache
    $StartTomcat
  fi
  echo "------------------------------"
}
Monitor>>$TomcatMonitorLog
複製程式碼

在bin目錄下執行:./monitor.sh(點不出的話先授權:sudo chmod a+x monitor.sh),發現報錯,錯誤如下:

-bash: ./monitor.sh: /bin/sh^M: bad interpreter: No such file or directory
複製程式碼

原因是因為在windows下編輯的,然後上傳到linux系統裡執行。.sh檔案的格式為dos格式,而linux只能執行格式為unix格式的指令碼 ,解決方法:

# 沒有 需要先安裝
yum install dos2unix
# 修改格式
dos2unix monitor.sh
複製程式碼

新增任務

# 沒有安裝 需要先安裝crontab
yum install crontab 
# 啟動
/sbin/service crond start
# 停止
/sbin/service crond stop
# 重啟服務
/sbin/service crond restart
# 重新載入
/sbin/service crond reload

# crontab其他命令
要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 指令碼中加入 /sbin/service crond start 即可
檢視當前使用者的crontab,輸入 crontab -l
編輯crontab,輸入 crontab -e
刪除crontab,輸入 crontab -r
複製程式碼

crontab -e ,在文件末尾處新增(每隔2分鐘執行一次):

*/2 * * * * /usr/local/hrfiles/apache-tomcat-8.5.29_2/bin/monitor.sh
複製程式碼

執行日誌可檢視:

tail -f /tmp/TomcatMonitor.log
複製程式碼

歡迎關注我的公眾號哦~ 搜尋公眾號:翻身碼農把歌唱 或者 掃描下方二維碼:

img

相關文章