windows下tomcat无故宕机自动检测重启,完美解决shutdown无法关闭问题
1、废话不说先上脚本这个脚本也是参考大佬的这个随便放在一个地方,直接管理员方式运行就可以
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
rem 链接
set URL="http://localhost:8345/"
rem tomcat目录
set TOMCAT_HOME="D:\apache-tomcat-7.0.82"
rem 关闭tomcat命令的路径
set CLOSE_CMD=%TOMCAT_HOME%\bin\closetomcatpid.bat
rem 启动tomcat命令的路径
set START_CMD=%TOMCAT_HOME%\bin\startup.bat
rem 日志文件的路径
set LOG_PATH=%TOMCAT_HOME%\check.log
rem 每次检测完后等待时间,再进行下一次检测,秒,若将程序部署到系统计划任务,可忽略
set TIME_WAIT=5
:loop
set httpcode=0
cd /d %TOMCAT_HOME%
echo %date% %time%
echo 'begin checking tomcat'
echo %date% %time% >>%LOG_PATH%
for /l %%i in (1,1,10) do (
echo %%i
for /f "delims=" %%r in ('curl -sL -w "%%{http_code}" %URL% -o /dev/null') do (
set httpcode=%%r
if !httpcode!==200 (
GOTO :OUTFOR
)
)
)
:OUTFOR
echo %httpcode% >>%LOG_PATH%
if not %httpcode%==200 (
echo close tomcat >>%LOG_PATH%
call %CLOSE_CMD%
timeout -t 5 >nul
echo success to close tomcat >>%LOG_PATH%
echo start tomcat >>%LOG_PATH%
call %START_CMD%
echo success to start tomcat
echo success to start tomcat >>%LOG_PATH%
) else (
echo the tomcat run is ok
echo the tomcat run is ok >>%LOG_PATH%
)
timeout -t 3 >nul
rem 若将脚本程序部署到系统计划程序中,将以下代码可注释
timeout -t %TIME_WAIT% >nul
goto loop
2、大佬用的是tomcat里面的shutdown.bat,但是生产环境里会遇到无法关闭的问题,再启动的时候会报错起不来,这里我进行改进,用自己写的脚本代替
,主要改动是CLOSE_CMD这个参数,在tomcat的bin里面新增closetomcatpid.bat文件,用检测端口获取pid的方式结束进程,这样就可以关闭tomcat,并且过滤掉pid等于0的情况,如果不过滤可能会直接报错卡主,不往下执行,文件内容如下:
@echo off
for /f "tokens=5" %%i in ('netstat -aon ^| findstr ":8345"') do (
if %%i NEQ 0 taskkill /f /pid %%i
)
3、8345是端口号记得修改,需要你们修改的参数就是URL,tomcat目录,端口号这三个
特此感谢大佬的文章