例如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_Managentapache-tomcatconfupdate.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 "%~dp0pid.txt ) echo depotupdate:%depotupdate% rem 判断 update 状态 depotupdate 状态 if "null" == "%depotupdate%" ( echo depotupdate:%depotupdate% 不是升级造成的 重启Tomcat ::setx /M CATALINA_HOME "%ETC_HOME%ETC_Managentapache-tomcat" %ETC_HOME%ETC_Managentapache-tomcatinstartup.bat ) if not "null" == "%depotupdate%" ( echo depotupdate:%depotupdate% 是升级造成tomcat 挂掉 执行升级、 java -jar %ETC_HOME%ETC_Managentscriptupdate.jar %depotupdate% del /a/f/q %ETC_HOME%ETC_Managentapache-tomcatconfupdate.properties ) ) pause