如何确定Tomcat是否已停止批量运行

时间:2014-11-15 02:31:14

标签: windows tomcat batch-file cmd restart

我找到了这个问题的答案,但找不到。

这是我的代码 restart.bat 。在重新启动之前,我需要检查Tomcat是否已停止。现在,脚本不会等待Tomcat。

@echo off
    set "CATALINA_HOME=C:\DIR\Tomcat"
    set "STOP=%CATALINA_HOME%\bin\shutdown.bat"
    set "START=%CATALINA_HOME%\bin\startup.bat"
@echo on
    call %STOP%
    TIMEOUT /T 2

Rem trying to wait Tomcat Stop
Rem How to know it?

    call %START%
    TIMEOUT /T 2

当我们在catalina.YYYY-MM-DD.log文件中读取行(消息)时,Tomcat正在运行并能够回复请求:

mmm dd, YYYY HH:mm: ss xM org.apache.catalina.startup.Catalina start
INFO: Server startup in 106737 ms
当我们在catalina.YYYY-MM-DD.log文件中读取行(消息)时,Tomcat肯定已经停止了:

mmm dd, YYYY HH:mm: ss xM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-bio-8080"]
mmm dd, YYYY HH:mm: ss xM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]

然后我想到了另一个代码片段 running.bat 脚本:

@echo off
    tasklist /FI "SessionName eq services" | find /I "tomcat" | find /I ".exe"> NUL
    if %errorlevel%==0 goto :run
    echo Tomcat is not running
    goto :eof
:run
    echo Tomcat is running
:eof

如何只创建一个脚本?

1 个答案:

答案 0 :(得分:1)

这应该做你需要的。正如您所建议的那样,您不需要检查日志,因为任务列表中的tomcat状态可以告诉您它是否正在运行。我插入了一个"等待"所以每秒都要检查一次任务列表,直到Tomcat停止。

@echo off
    set "CATALINA_HOME=C:\DIR\Tomcat"
    set "STOP=%CATALINA_HOME%\bin\shutdown.bat"
    set "START=%CATALINA_HOME%\bin\startup.bat"

:stop
    call %STOP%
    call :runstat
        echo Tomcat has stopped
        pause
    call %START%

:runstat
    tasklist /FI "SessionName eq services" | find /I "tomcat" | find /I ".exe"> NUL
    set err=%errorlevel%

    :: see if stopped condition is met and if yes exit 
       if %err%==1 exit /b
    :: else wait 1 second and try again
       PING 127.0.0.1 -n 60 >NUL 2>&1 || PING ::1 -n 60 >NUL 2>&1
       goto runstat

工作原理:标签中的代码:runstat查看tasklist errorlevel以确定Tomcat是否正在运行并在Tomcat停止时退回到调用例程 - 返回errorlevel 1。在返回1之前,ping会在通过goto再次检查tasklist之前插入一秒钟的延迟。

(我已经使用这种很棒的ping方法插入延迟多年。时间(60)以毫秒为单位,可以调整。这里解释一下:http://www.robvanderwoude.com/wait.php