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