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