1. 程式人生 > 實用技巧 >Windows下監控埠號

Windows下監控埠號

例如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