windows下實現tomcat監控並自動啟動服務
阿新 • • 發佈:2019-01-03
應用場景:
windows執行tomcat服務,為了避免系統崩潰導致出現無法提供服務的情況,我們通過編輯相應的bat指令碼,進行tomcat檢測。進而實現專案監控並自動重啟。
下面是一個實現tomcat監控並重啟的例子
//echo off是批處理檔案中的命令,可以使得下面的命令不在顯示屏上面顯示,前面加上@是為了使其本身不顯示 @echo off //setlocal是批處理本地化的一種操作,在執行setlocal之後所做的環境改動只限於批處理檔案 //ENABLEDELAYEDEXPANSION 啟用變數延遲,直到出現匹配的endlocal命令 SETLOCAL ENABLEDELAYEDEXPANSION //rem的意思是註釋 rem 連結 set URL="http://tal.com/cloudAISystem/" rem tomcat目錄 set TOMCAT_HOME="C:\tomcat\apache-tomcat-8080" rem 關閉tomcat命令的路徑 set CLOSE_CMD=net stop Tomcat8 rem 啟動tomcat命令的路徑 set START_CMD=net start Tomcat8 rem tomcat快取目錄 set TOMCAT_CACHE=%TOMCAT_HOME%\work rem 日誌檔案的路徑 set LOG_PATH=%TOMCAT_HOME%\check.log rem 每次檢測完後等待時間,再進行下一次檢測,若將程式部署到系統計劃任務,可忽略 set TIME_WAIT=30 rem 設定通知介面的工具程式 set NOTIFICATION_MESS="C:\Program Files\messagePush.exe" //echo string:將字串顯示在螢幕中 //:loop 和下面的goto組合成迴圈 :loop //設定變數http狀態碼 set httpcode=0 //開啟tomcat目錄 cd /d %TOMCAT_HOME% //列印時間 echo %date% %time% //在螢幕上列印執行狀態 echo 'begin checking tomcat' //將記錄儲存在日誌檔案中 echo %date% %time% >>%LOG_PATH% //迴圈 //FOR [引數] %%變數名 IN (相關檔案或命令) DO 執行的命令 //其中引數有/d /l /r /f //引數 /d (引數只能顯示當前目錄下的目錄名字) //引數 /R (搜尋指定路徑及所有子目錄中與set相符合的所有檔案) //引數 /L (該集表示以增量形式從開始到結束的一個數字序列。可以使用負的 Step) //引數 /F (使用檔案解析來處理命令輸出、字串及檔案內容。) //(相關檔案或命令)指定一個或一組檔案。可以使用萬用字元 for /l %%i in (1,1,20) do ( echo %%i //藉助工具獲得專案的狀態頭(curl工具的安裝會在下面提及) for /f "delims=" %%r in ('curl -sL -w "%%{http_code}" %URL% -o /dev/null') do ( //將變數r的值賦值給httpcode set httpcode=%%r if !httpcode!==200 ( GOTO :OUTFOR ) ) ) :OUTFOR echo %httpcode% >>%LOG_PATH% if not %httpcode%==200 ( //不等於200,則傳送啟動傳送簡訊的程式 start /min "" "C:\Program Files\crul\KXunOnlineState.exe" call %NOTIFICATION_MESS% echo close tomcat >>%LOG_PATH% //關閉tomcat call在批處理中用於呼叫另一個批處理檔案,start用於執行一些外部程式 start %CLOSE_CMD% timeout -t 10 >nul //記錄日誌 echo success to close tomcat >>%LOG_PATH% //清除tomcatwork空間 /s意思是不需要確認的刪除 /Q是清除目錄及子目錄 rd /S /Q %TOMCAT_CACHE% echo start tomcat >>%LOG_PATH% //開啟tomcat,執行bat檔案 call %START_CMD% echo success to start tomcat echo success to start tomcat >>%LOG_PATH% ) else ( echo the tomcat is running echo the tomcat is running>>%LOG_PATH% ) timeout -t 3 >nul rem 若將指令碼程式部署到系統計劃程式中,將以下程式碼可註釋 timeout -t %TIME_WAIT% >nul goto loop
總結:本文實現的總體思路與linux下的思想一致,檢測專案是否正常訪問,通過獲取的結果頭進行判斷,如果訪問失敗,則再次嘗試,知道迴圈結束還沒有訪問成功則重啟服務。如果嘗試成功,則直接跳出迴圈,實現下一次的訪問。
本文用到一個命令curl,需要自己安裝才能正確使用,否則回報異常:'curl' is not recognized as an internal or external command, operable program or batch file.可自行下載安裝使用。
快捷使用:
如果執行過程中出現如下錯誤:
直接將指令碼用記事本開啟,儲存ANSI指令碼。因為批處理只支援ANSI指令碼