bat 自动重启 Tomcat

脚本来自 Windows 中 Tomcat 无故宕机,如何自动重启 Tomcat,这里给脚本添加注释

@echo off
rem 启用延迟变量扩展(delayed variable expansion)
SETLOCAL ENABLEDELAYEDEXPANSION

rem 链接
set URL="http://localhost:8008/"
rem tomcat目录
set TOMCAT_HOME="D:\Program Files\apache-tomcat-9.0.50"
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%\temp
rem 日志文件的路径
set LOG_PATH=%TOMCAT_HOME%\check.log
rem set LOG_PATH=nul
rem 每次检测完后等待时间,再进行下一次检测,秒,若将程序部署到系统计划任务,可忽略
set TIME_WAIT=5

rem 自定义标签,和 goto 结合使用
:loop
set httpcode=0
rem 切换到tomcat目录
	rem /d 表示要切换到一个新的目录,而且这个目录可以位于不同的驱动器
cd /d %TOMCAT_HOME%
echo %date% %time%
echo 'begin checking tomcat'

echo %date% %time% >>%LOG_PATH%
rem 创建一个循环,从1到10的范围中遍历每个数字
	rem /l 表示要创建一个数字范围的循环
	rem %%i 循环变量,用于在每次迭代中存储循环的当前值
	rem in (1,1,10) 表示从1开始,以1为步长,一直循环到10
for /l %%i in (1,1,10) do (
	echo %%i
	rem 执行 curl 命令来获取指定URL的HTTP响应代码
		rem /f 表示要使用文件或命令的输出作为循环变量
		rem "delims=" 这是 for 命令的参数,指定分隔符(delimiters)。在这个例子中,delims= 表示没有分隔符,因此整个输出行将被视为一个整体
		rem 'curl -sL -w "%%{http_code}" %URL% -o /dev/null' 用于获取指定URL的HTTP响应代码
			rem curl 是一个用于发起HTTP请求的命令行工具,-sL 参数表示安静模式并且跟踪重定向
			rem -w "%%{http_code}" 表示使用 -w 参数指定输出格式,返回HTTP响应代码
			rem %URL% 是要请求的URL地址,-o /dev/null 表示将响应的主体部分输出到/dev/null(相当于丢弃响应主体)
	for /f "delims=" %%r in ('curl -sL -w "%%{http_code}" %URL% -o /dev/null') do (
		set httpcode=%%r
		rem ! 是用于启用延迟变量扩展(delayed variable expansion)的标记
		if !httpcode!==200 (
			goto :OUTFOR
		)
	)
)

:OUTFOR
echo %httpcode% >>%LOG_PATH%

if not %httpcode%==200 (
	echo close tomcat >>%LOG_PATH%
	call %CLOSE_CMD%
	rem 创建一个5秒的等待时间
		rem timeout 创建一个等待指定时间的暂停
		rem -t 5 等待5秒
		rem >nul > 表示将命令的输出重定向到指定位置,nul 是一个特殊的设备文件,用于丢弃命令的输出,也就是不显示命令的输出
	timeout -t 5 >nul
	echo success to close tomcat >>%LOG_PATH%

	rem 删除缓存目录
		rem rd "remove directory"的缩写,用于删除目录(文件夹)
		rem /S 递归删除整个目录树
		rem /Q 表示"quiet",即不显示任何确认信息或提示)
	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

添加注释后不能运行,要去掉:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set URL="http://localhost:8008/"
set TOMCAT_HOME="D:\Program Files\apache-tomcat-9.0.50"
set CLOSE_CMD=%TOMCAT_HOME%\bin\shutdown.bat
set START_CMD=%TOMCAT_HOME%\bin\startup.bat
set TOMCAT_CACHE=%TOMCAT_HOME%\temp
set LOG_PATH=%TOMCAT_HOME%\check.log
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%

	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
timeout -t %TIME_WAIT% >nul
goto loop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章