1. 程式人生 > >linux定時任務監控tomcat狀態

linux定時任務監控tomcat狀態

最近入了VPS,由於記憶體過小,tomcat程序經常被KILL掉,在百度之後發現可以寫一個指令碼來監控tomcat狀態,當tomcat掛掉時,自動啟動tomcat,並啟用定時任務來執行它。

#下面是shell指令碼

#!/bin/sh
# function:自動監控tomcat程序,掛了就執行重啟操作

# 獲取tomcat PPID
TomcatID=$(ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}')
# tomcat_startup
StartTomcat=/usr/local/tomcat/tomcat7/bin/startup.sh


#TomcatCache=/usr/local/tomcat/tomcat7/work

# 定義要監控的頁面地址
WebUrl=http://lazyrabbit.tech/

# 日誌輸出
GetPageInfo=/dev/null
TomcatMonitorLog=/tmp/TomcatMonitor.log

Monitor()
{
  echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')]"
  if [ "$TomcatID" ];then
    echo "[info]tomcat程序ID為:$TomcatID."
    # 獲取返回狀態碼
    TomcatServiceCode=$(curl -s -o /dev/null --connect-timeout 10 -m 20 $WebUrl -w %{http_code})
    if [ $TomcatServiceCode -eq 200 ];then
        echo "[info]返回碼為$TomcatServiceCode,tomcat啟動成功,頁面正常."
    else
        echo "[error]訪問出錯,狀態碼為$TomcatServiceCode,錯誤日誌已輸出到$GetPageInfo"
        echo "[error]開始重啟tomcat"
        kill -9 $TomcatID  # 殺掉原tomcat程序
        sleep 3
        #rm -rf $TomcatCache # 清理tomcat快取
        $StartTomcat
    fi
  else
    echo "[error]程序不存在!tomcat自動重啟..."
    echo "[info]$StartTomcat,請稍候......"
    #rm -rf $TomcatCache
    $StartTomcat
  fi
  echo "------------------------------"
}
Monitor>>$TomcatMonitorLog

其中tomcat_startup 是tomcat啟動指令碼的路徑,WebUrl是要監控的頁面地址,使用時只需要修改它們就可以。

獲取tomcat執行狀態的命令

ps -ef | grep tomcat | grep -v 'grep' | awk '{print $2}'

訪問頁面返回狀態碼的命令

curl -s -o /dev/null --connect-timeout 10 -m 20 http://lazyrabbit.tech -w %{http_code}

#接下來設定定時任務

新增定時任務,每五分鐘執行一次

crontab -e
*/5 * * * * /usr/local/tomcat/monitor.sh

檢視定時任務

crontab -l

#可能出現的問題

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

At least one of these environment variable is needed to run this program

tomcat啟動沒有找到jdk環境,需要在tomcat/bin路徑下的setclasspath.sh檔案中配置jdk路徑

export JAVA_HOME=/usr/local/java/jdk8
export JRE_HOME=/usr/local/java/jdk8/jre

/usr/local/tomcat/monitor.sh: Permission denied

這個指令碼沒有許可權,需要設定許可權

chmod 777 monitor.sh