明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

Tomcat服务自动关闭 , 定时检查并重启

Posted on 2026-04-09 14:40  且行且思  阅读(0)  评论(0)    收藏  举报
@echo off
title Auto-%date%-%time%-%cd%)

SETLOCAL ENABLEDELAYEDEXPANSION

rem 链接http://www.xxx.cn/site
set URL="https://www.xxx.cn/site"
rem tomcat目录
set TOMCAT_HOME="D:\Tomcat 8.5"
rem 关闭tomcat命令的路径
set CLOSE_CMD=%TOMCAT_HOME%\bin\shutdown.bat
rem 启动tomcat命令的路径
set START_CMD=%TOMCAT_HOME%\bin\startup.bat
rem tomcat缓存目录
set TOMCAT_CACHE=%TOMCAT_HOME%\HuanCun
rem 日志文件的路径
set LOG_PATH=%TOMCAT_HOME%\check_bat.log
rem 每次检测完后等待时间,再进行下一次检测,秒,若将程序部署到系统计划任务,可忽略
set TIME_WAIT=8

: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 (
   rem  FOR /F "tokens=6 delims= " %%P IN ('netstat -a -n -o ^| findstr :8000') DO TaskKill.exe /PID %%P

    for %%a in (8000) do (
        set pid=0
        for /f "tokens=2,5" %%b in ('netstat -ano ^| findstr ":%%a"') do (
            set temp=%%b
            for /f "usebackq delims=: tokens=2,5" %%i in (`set temp`) do (
                if %%j==%%a (
                    taskkill /f /pid %%c
                    set pid=%%c
                    echo 端口号【%%a】相关进程已杀死
                ) else (
                    echo 不是本机占用端口【%%a】
                )
            )
        )
        if !pid!==0 (
           echo 端口号【%%a】没有占用
        )
    )


    echo close tomcat >>%LOG_PATH%
    call %CLOSE_CMD%
    timeout -t 5 >nul
    echo success to close tomcat >>%LOG_PATH%

    rd /S /Q %TOMCAT_CACHE%
    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