1. 程式人生 > >windows下實現tomcat監控並自動啟動服務

windows下實現tomcat監控並自動啟動服務

應用場景:

  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指令碼