Windows下監控埠號
阿新 • • 發佈:2020-07-24
例如tomcat 埠號 如果tomcat 死掉 並重啟
@echo off rem 讀取tomcat死之前 的配置檔案 depotupdate賦予預設值 !null 升級失敗造成的tomcat 死亡(java -jar 升級程式) 如果沒有此值或者此檔案 不知為何tomcat 會死 5分鐘檢測一次 set depotupdate=null set tomcatPort=80 set URL="http://localhost:%tomcatPort%/depot/TestServlet" set httpcode=0 rem 判斷 tomcat 死活 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 ) ) rem 判斷 tomcat 是如何死的 如果是升級造成死亡 執行升級程式 否則直接啟動 for /f "tokens=1,2 delims==" %%i in (%ETC_HOME%\ETC_Managent\apache-tomcat\conf\update.properties) do ( if "%%i"=="depotupdate" set depotupdate=%%j if "%%i"=="tomcatPort" set tomcatPort=%%j ) echo 是否通斷 %httpcode% echo 埠號 %tomcatPort% rem 判斷 httpcode 是否 ==200 200 說明通tomcat 還活著 , 不是200 說明不通 不同說明 tomcat 死了 啟動 if not %httpcode%==200 ( netstat -ano|findstr 0.0.0.0:%host%>pid.txt rem 查詢程序記錄,提取第5列的值,並終止程序,for 預設根據空格,製表符,;等進行字串分割 for /f "tokens=5" %%i in (%cd%\pid.txt) do ( echo 雖然tomcat 死了但是程序依舊存在 殺死 echo try to kill pid %%i taskkill /pid %%i /F rem 刪除pid.txt檔案 del /a/f/q "%~dp0\pid.txt ) echo depotupdate:%depotupdate% rem 判斷 update 狀態 depotupdate 狀態 if "null" == "%depotupdate%" ( echo depotupdate:%depotupdate% 不是升級造成的 重啟Tomcat ::setx /M CATALINA_HOME "%ETC_HOME%\ETC_Managent\apache-tomcat" %ETC_HOME%\ETC_Managent\apache-tomcat\bin\startup.bat ) if not "null" == "%depotupdate%" ( echo depotupdate:%depotupdate% 是升級造成tomcat 掛掉 執行升級、 java -jar %ETC_HOME%\ETC_Managent\script\update.jar %depotupdate% del /a/f/q %ETC_HOME%\ETC_Managent\apache-tomcat\conf\update.properties ) ) pause