Skip to content

Instantly share code, notes, and snippets.

@pgbrandolin
Created April 11, 2020 06:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pgbrandolin/bdf1be64a769d09f937263755a46f91b to your computer and use it in GitHub Desktop.
Save pgbrandolin/bdf1be64a769d09f937263755a46f91b to your computer and use it in GitHub Desktop.
[tomrestart.bat] Stop Tomcat - Rotazione Log - Restart Tomcat Windows #dos #tomcat #log
@echo off
rem
SETLOCAL EnableDelayedExpansion
rem.
rem
rem FUNZIONE DELLO SCRIPT - Da posizionare in CATALINA_BASE\bin
rem #@# STOP Tomcat Service -> move/zip LOGS -> Restart Tomcat Service
rem IMPOSTAZIONI:
rem CATALINA_BASE = Directory di (questa istanza di) Tomcat
rem TOMSVCNAME = Nome del servizio Tomcat corrisponedente a questa directory "bin"
rem MAXFILES = N. max di zipped logfiles da mantenere
rem TOMTMOUT = Tempo di ritardo tra STOP e START
rem ---------------------------------------------------------------------------------
set "CATALINA_BASE=D:\Ateikon-im\apache-tomcat-7.0.59"
set "TOMSVCNAME=Tomcat7exp"
set "MAXFILES=5"
set "TOMTMOUT=10"
rem ---------------------------------------------------------------------------------
set "MYREVISION=1.0"
set "MYPATH=%~dp0"
set "MYNAMES=%~n0"
set "MYEXT=%~x0"
set "MYLAST=%MYPATH:~-4%"
set "MYTIME=%TIME%"
set "MYTIMEA=%MYTIME:~0,8%"
set "MYTIMEA=%MYTIMEA: =0%"
set "MYTIMEB=%MYTIMEA::=%"
set "MYDATE=%DATE%"
set "MYDATEF=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%"
set "MYDIRSAVE=logs.save"
set "MYDIRNAME=logs-al-%MYDATEF%-%MYTIMEB%"
set "MYZIPNAME=%MYDIRNAME%.zip"
set "XITCODE=0"
rem.
SET "MYTOMPATH=%CATALINA_BASE%"
SET "MYBINPATH=%CATALINA_BASE%\bin"
SET "MYLOGPATH=%CATALINA_BASE%\logs"
set "MYPRIVPATH=%CATALINA_BASE%\log-rotate"
set "MYPRIVLOGF=%MYPRIVPATH%\logrotate-%MYDATEF%-%MYTIMEB%.log"
rem set "MYPRIVLOGF=%MYPRIVPATH%\logrotate.log"
rem set "MYPRIVLOGF=CON:"
rem.
set "RETCODE=0"
rem.
rem --- Testing availability of external programs
rem.
set "THEGNUBIN=C:\Program Files (x86)\GnuWin32\bin"
rem where /q "%THEGNUBIN%:find.exe" || ECHO Could not find GNUWin32 find.exe && EXIT /B 1
rem where /q "%THEGNUBIN%:date.exe" || ECHO Could not find GNUWin32 date.exe && EXIT /B 1
rem where /q "%THEGNUBIN%:grep.exe" || ECHO Could not find GNUWin32 grep.exe && EXIT /B 1
where /q "wmic.exe" || ECHO Could not find wmic.exe && EXIT /B 1
where /q "zip.exe" || ECHO Could not find zip.exe && EXIT /B 1
rem.
rem wmic path win32_localtime get dayofweek /format:list
rem.
rem START (Create my log directory and print first message)
rem.
rem.
rem Create dir for my own log
rem.
mkdir "%MYPRIVPATH%" 2>NUL
rem.
ECHO ---START Rev: %MYREVISION% tmout=%TOMTMOUT% : %DATE% %TIME% >%MYPRIVLOGF%
echo Service Name : ==%TOMSVCNAME%== >>%MYPRIVLOGF%
echo Catalina_Base: ==%CATALINA_BASE%== >>%MYPRIVLOGF%
echo Path log dir : %MYPRIVPATH% >>%MYPRIVLOGF%
echo Path log file: %MYPRIVLOGF% >>%MYPRIVLOGF%
rem.
rem Try to chdir where I should live (sanity check)
rem.
cd /D "%MYBINPATH%"
if !ERRORLEVEL! equ 0 (
echo Posizionamento OK in %MYBINPATH% >>%MYPRIVLOGF%
) else (
echo Posizionamento NON CORRETTO in %MYBINPATH% >>%MYPRIVLOGF%
set "RETCODE=2"
goto :the_exit
)
rem.
rem --- Sanity Check "Current dir" == "CATALINA_BASE\bin"
rem.
IF "%MYPATH%" NEQ "%CATALINA_BASE%\bin\" (
echo Wrong current directory OR Wrong CATALINA_BASE - Exit. >>%MYPRIVLOGF%
set "RETCODE=2"
goto :the_exit
) else (
echo Current dir and Catalina Base OK >>%MYPRIVLOGF%
)
rem.
rem --- Sanity Check ("Current dir" must be substring of "Service PathName")
rem.
set "SVCFOUND=N"
FOR /F "tokens=1,2,3 usebackq delims=," %%F IN (`wmic service get name^,PathName /format:csv ^| find "%TOMSVCNAME%"`) DO (
set "THESYSNAME=%%F"
set "THESVCNAME=%%G"
set "THESVCPATH=%%H"
IF [!THESVCNAME!] == [%TOMSVCNAME%] (
echo svcN: !THESVCNAME! >>%MYPRIVLOGF%
echo svcP: !THESVCPATH! >>%MYPRIVLOGF%
echo curP: %MYPATH% >>%MYPRIVLOGF%
echo !THESVCPATH! | find "%MYPATH%" 1>nul
if !ERRORLEVEL! equ 0 (
echo Path of service executable: OK >>%MYPRIVLOGF%
) else (
echo Path of service executable: KO... >>%MYPRIVLOGF%
set "RETCODE=2"
goto :the_exit
rem exit /b 2
)
echo Found service: %TOMSVCNAME% >>%MYPRIVLOGF%
set "SVCFOUND=Y"
)
)
IF "!SVCFOUND!" NEQ "Y" (
echo Service not found with wmic >>%MYPRIVLOGF%
set "RETCODE=2"
goto :the_exit
rem exit /b 2
)
rem.
rem --- Check Running Tomcat Service (based on SVC Name) and get PID
rem.
FOR /F "tokens=2 usebackq delims=:" %%F IN (`sc queryex "%TOMSVCNAME%" ^| findstr PID`) DO ( set "TOMPID=%%F" )
IF [!TOMPID!] == [] (
echo Tomcat Not Running >>%MYPRIVLOGF%
GOTO :tom_rotate
) else (
echo Pid:!TOMPID! >>%MYPRIVLOGF%
)
rem.
:tom_stop
net stop "%TOMSVCNAME%"
if !ERRORLEVEL! equ 0 (
echo Stopping service: OK >>%MYPRIVLOGF%
) else (
rem --- START Tomcat anyway
echo Stopping service: ERROR >>%MYPRIVLOGF%
set "RETCODE=2"
goto :tom_rotate
rem goto :the_exit
)
timeout /T %TOMTMOUT% /nobreak
rem.
:tom_rotate
CD ..
if exist ".\logs" (
echo Log dir: esistente >>%MYPRIVLOGF%
echo Log dir: rinomino dir logs >>%MYPRIVLOGF%
rename logs "%MYDIRNAME%" 2>&1 >>%MYPRIVLOGF%
echo Log dir: ricreo logs >>%MYPRIVLOGF%
mkdir logs
if not exist "%MYDIRSAVE%" (
mkdir "%MYDIRSAVE%" 2>&1 >>%MYPRIVLOGF%
)
echo Log dir: compressione zip >>%MYPRIVLOGF%
zip -q -r "%MYDIRSAVE%\%MYZIPNAME%" "%MYDIRNAME%"
echo Log dir: rimuovo %MYDIRNAME% >>%MYPRIVLOGF%
rmdir /s /q "%MYDIRNAME%"
) else (
echo Logs dir NON esistente >>%MYPRIVLOGF%
set "RETCODE=2"
goto :the_exit
rem EXIT /B 2
)
rem.
:tom_deleteold
echo delete old zip files: older than %MAXFILES% days >>%MYPRIVLOGF%
set /A COUNTER=1 + 0
for /f "tokens=* usebackq" %%G in (`DIR /B /O:-D .\logs.save\`) do (
set /A COUNTER=!COUNTER! + 1
if !COUNTER! GTR %MAXFILES% (
echo DEL /F /Q ".\logs.save\%%G" >>%MYPRIVLOGF%
DEL /F /Q ".\logs.save\%%G" >>%MYPRIVLOGF%
) else (
echo NO DEL /F /Q ".\logs.save\%%G" >>%MYPRIVLOGF%
)
)
rem.
:tom_start
net start "%TOMSVCNAME%"
if !ERRORLEVEL! equ 0 (
echo Start Service: OK >>%MYPRIVLOGF%
) else (
echo Starting service: ERROR >>%MYPRIVLOGF%
set "RETCODE=2"
goto :the_exit
rem exit /b 2
)
:the_exit
ECHO ---END [Rev: %MYREV%]: %DATE% %TIME% --- >>%MYPRIVLOGF%
exit /b !RETCODE!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment