#!/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.logMonitor()
{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 -9echo "同一tomcat開啟開啟 $TomcatCount 個進程,統統kill掉"sleep 5elseif [ $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 ];thenecho "[info]頁面返回碼為$TomcatServiceCode,tomcat啟動成功,測試頁面正常"elseecho "[error]tomcat頁面出錯,請注意...狀態碼為$TomcatServiceCode,錯誤日志已輸出到$GetPageInfo"echo "[error]頁面訪問出錯,開始重啟tomcat"kill -9 $TomcatID # 殺掉原tomcat進程sleep 5rm -rf $TomcatCache # 清理tomcat緩存$StartTomcatfielseecho "[error]tomcat進程不存在!tomcat開始自動重啟..."echo "[info]$StartTomcat,請稍候..."rm -rf $TomcatCache$StartTomcatfifiecho "--------------------------"
}
Monitor>>$TomcatMonitorLog
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
?
?