天天看點

Linux上監控Tomcat Down掉後自動重新開機Tomcat

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
複制代碼
           

歡迎關注我的公衆号哦~ 搜尋公衆号:

翻身碼農把歌唱 或者 掃描下方二維碼: