tomcat監控,自動重啟shell腳本


tomcat監控,自動重啟shell腳本如下,取名 monitor_tomcat.sh:

#!/bin/sh

# func:自動監控tomcat腳本並且執行重啟操作

# 獲取tomcat進程ID(其中[grep -w '.....']中的.....需要替換為實際部署的tomcat文件夾名,如下)
TomcatID=$(ps -ef |grep tomcat |grep -w '/usr/local/tomcat/apache-tomcat-8.5.31'|grep -v 'grep'|awk '{print $2}')
# 獲取同一個tomcat重復啟動個數
TomcatCount=$( ps -ef |grep tomcat |grep -w '/usr/local/tomcat_autoupdate'|grep -v 'grep'|awk '{print $2}' |wc -l)

# tomcat啟動程序(這里注意tomcat實際安裝的路徑)
StartTomcat=/usr/local/tomcat/apache-tomcat-8.5.31/bin/startup.sh
TomcatCache=/usr/local/tomcat/apache-tomcat-8.5.31/work

#定義要監控的頁面地址
WebUrl=http://localhost:8080/test2

#日志輸出
GetPageInfo=/tmp/tomcat_oip_back_visit.info
TomcatMonitorLog=/tmp/tomcat_oip_back_monitor.log

Monitor()
{
    echo "[info]開始監控tomcat...[$(date +'%F %H:%M:%S')]"
    if [[ $TomcatCount -gt 1 ]];then #這里判斷Tomcat進程是否有重復啟動,有重復啟動則全部干掉
      ps -ef |grep tomcat |grep -w '/usr/local/tomcat_autoupdate'|grep -v 'grep'|awk '{print $2}' | xargs kill -9
      echo "同一tomcat開啟開啟 $TomcatCount 個進程,統統kill掉"
      sleep 5
    else
        if [ $TomcatID ];then #這里判斷Tomcat進程是否存在
                echo "[info]當前tomcat進程ID為:$TomcatID,繼續檢測頁面..."
                # 檢測是否啟動成功(成功的話頁面會返回狀態"200"),100秒無響應就不等待了
                TomcatServiceCode=$(curl -s -o $GetPageInfo -m 100 --connect-timeout 100 $WebUrl -w %{http_code})
                if [ $TomcatServiceCode -eq 200 ];then
                        echo "[info]頁面返回碼為$TomcatServiceCode,tomcat啟動成功,測試頁面正常"
                else
                        echo "[error]tomcat頁面出錯,請注意...狀態碼為$TomcatServiceCode,錯誤日志已輸出到$GetPageInfo"
                        echo "[error]頁面訪問出錯,開始重啟tomcat"
                        kill -9 $TomcatID # 殺掉原tomcat進程
                        sleep 5
                        rm -rf $TomcatCache # 清理tomcat緩存
                        $StartTomcat
                fi
        else
                echo "[error]tomcat進程不存在!tomcat開始自動重啟..."
                echo "[info]$StartTomcat,請稍候..."
                rm -rf $TomcatCache
                $StartTomcat
        fi
     fi
    echo "--------------------------"
}
Monitor>>$TomcatMonitorLog

 

2、賦予monitor_tomcat.sh可執行權限:

chmod 777 monitor_tomcat.sh

3、手動執行一下monitor_tomcat.sh看是否能啟動指定位置的tomcat

./monitor_tomcat.sh

4、腳本解釋說明

ps  -e  //顯示所有進程

ps -f   //按樹狀顯示

grep tomcat  //只取含有tomcat的行

grep -w 'apache-tomcat-5.5.23'        //-w選項搜索一個單詞,並且避免搜索到詞中的部分字串。 搜索含有apache-tomcat-5.5.23的行

grep -v 'grep'    //去掉含有grep的行

awk '{print $2}'  //用空格切分 取第二列

ps -ef |grep tomcat |grep -w 'apache-tomcat-5.5.23'|grep -v 'grep'|awk '{print $2}'   //獲取tomcat的進程id 

但是僅僅是 tomcat進程存在是不夠的,需要訪問下  站點頁面看看 是否訪問正常  正常狀態為200  通過curl 

curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code}   //訪問頁面並保存頁面內容返回狀態碼
-s --silent //靜默模式,就是不顯示錯誤和進度
-o $GetPageInfo //將文件保存到本地並命名為$GetPageInfo  
-m  //表示獲取網頁的最長時間(數據傳輸的最大允許時間)
-m 10 //表示如果10秒內無法完成獲取網頁源碼的操作,則放棄
--connect-timeout //連接超時時間
--connect-timeout 10  //表示如果10秒內無法連接,則放棄
$WebUrl //就是我們要訪問的頁面路徑變量
-w  //curl的-w參數我們可以自定義curl的輸出,%{http_code}代表http狀態碼

如果狀態碼為200則 tomcat正常,否則 kill  殺掉tomcat 進程, 訪問tomcat的啟動腳本 start.sh  啟動tomcat

5、添加進crontab中

輸入命令 :

crontab -e

進入編輯界面(操作類似vim),編輯為每5分鍾執行一次腳本進行tomcat檢測

*/5 * * * * /usr/local/my_crontab/monitor_tomcat.sh

6、批量刪除進程:

| xargs kill -9

將前面的結果作為參數傳入,一並kill掉 

7、統一前面結果的字符串個數

|wc -l

參考:https://blog.csdn.net/zhang41228/article/details/79860030

https://www.cnblogs.com/cocoat/p/6017283.html

https://blog.csdn.net/lzz313/article/details/9389211


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM