我找到了这个问题的答案,但找不到。
这是我的代码 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
如何只创建一个脚本?
答案 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)