由於全部的tomcat項目的進程名默認都叫java.exe,因此須要修改tomcat容器bin目錄下的setclasspath.bat。註釋掉:(在set前加上:冒號就行)java
set _RUNJAVA="%JRE_HOME%\bin\java.exe"windows
這句,改爲緩存
copy "%JAVA_HOME%\bin\java.exe" "%JAVA_HOME%\bin\xxxx.exe"
set _RUNJAVA="%JAVA_HOME%\bin\xxxx"tomcat
這樣,重啓tomcat項目,在 任務管理器 中就會看到更改後的進程名。curl
@echo off rem setlocal是批處理本地化的一種操做,在執行setlocal以後所作的環境改動只限於批處理文件 rem ENABLEDELAYEDEXPANSION 啓用變量延遲,直到出現匹配的endlocal命令 SETLOCAL ENABLEDELAYEDEXPANSION rem rem的意思是註釋 rem 連接 set URL="http://xx.xx.xx.xx:808x/xxxx/xxxx.jsp" rem tomcat目錄 set TOMCAT_HOME="C:\xxxx-tomcat-8.5.31" rem 關閉tomcat命令的路徑(xxx.exe就是第一步中設置的進程名) set CLOSE_CMD=taskkill /f /t /im xxxx.exe rem 啓動tomcat命令的路徑 set START_CMD=%TOMCAT_HOME%\bin\startup.bat rem tomcat緩存目錄 set TOMCAT_CACHE=%TOMCAT_HOME%\work rem 日誌文件的路徑 set LOG_PATH=%TOMCAT_HOME%\logs\check.log rem 每次檢測完後等待時間,再進行下一次檢測,若將程序部署到系統計劃任務,可忽略 rem set TIME_WAIT=30 rem echo string:將字符串顯示在屏幕中 rem :loop 和下面的goto組合成循環 :loop rem 設置變量http狀態碼 set httpcode=0 rem 打開tomcat目錄 cd /d %TOMCAT_HOME% rem 打印時間 echo %date% %time% rem 在屏幕上打印執行狀態 echo 'begin checking tomcat' rem 將記錄保存在日誌文件中 echo %date% %time% >>%LOG_PATH% rem 循環 rem FOR [參數] %%變量名 IN (相關文件或命令) DO 執行的命令 rem 其中參數有/d /l /r /f rem 參數 /d (參數只能顯示當前目錄下的目錄名字) rem 參數 /R (搜索指定路徑及全部子目錄中與set相符合的全部文件) rem 參數 /L (該集表示以增量形式從開始到結束的一個數字序列。可使用負的 Step) rem 參數 /F (使用文件解析來處理命令輸出、字符串及文件內容。) rem (相關文件或命令)指定一個或一組文件。可使用通配符 for /l %%i in (1,1,10) do ( echo %%i rem 藉助工具得到項目的狀態頭(curl工具的安裝會在下面說起) for /f "delims=" %%r in ('curl -sL -w "%%{http_code}" %URL% -o /dev/null') do ( rem 將變量r的值賦值給httpcode set httpcode=%%r if !httpcode!==200 ( GOTO :OUTFOR ) ) ) :OUTFOR echo %httpcode% >>%LOG_PATH% if not %httpcode%==200 ( call %NOTIFICATION_MESS% echo close tomcat >>%LOG_PATH% rem 關閉tomcat call在批處理中用於調用另外一個批處理文件,start用於執行一些外部程序 start %CLOSE_CMD% timeout -t 10 >nul rem 記錄日誌 echo success to close tomcat >>%LOG_PATH% rem 清除tomcatwork空間 /s意思是不須要確認的刪除 /Q是清除目錄及子目錄 rd /S /Q %TOMCAT_CACHE% echo start tomcat >>%LOG_PATH% rem 開啓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 若將腳本程序部署到系統計劃程序中,將如下代碼可註釋 rem timeout -t %TIME_WAIT% >nul rem goto loop
如何設置計劃任務,能夠自行百度。貼一個我設置的。jsp
程序或腳本中,選擇第二步建立的bat腳本。這樣每隔5分鐘,系統調用一次bat腳本,bat判斷tomcat是否還在運行。若是10秒鐘以後,訪問bat中的url失敗,tomcat項目將會自動啓動。工具
若是有多個tomcat須要此類操做,只須要將每一個tomcat項目按照上面三步操做一遍,最終實現監控多個tomcat,避免項目自動關閉的問題。oop