Reputation: 3499
I have seen this post..
Batch runs manually but not in scheduled task
It is not Win 2008, but is server 2003
Have a on-time Scheduled Task..
Does not run. Whether it is scheduled or "asked" to run manually.
Run.. D:\WORK\Scripts\res_tc.bat
Have had issue before with the use of double-colons "::" before and have tried to use: REM instead - but there is no difference.
Run as: NT AUTHORITY\SYSTEM
@ECHO OFF
CLS
REM DISABLE TOMCAT CHECK
SCHTASKS /QUERY|find /i "TCCheck">NUL
IF NOT ERRORLEVEL 1 SCHTASKS /CHANGE /TN "TCCheck" /DISABLE
ECHO CHECKING FOR AND KILLING JAVA
TASKLIST | FIND /I "java.exe" && IF NOT ERRORLEVEL 1 TASKKILL /F /IM java.exe
REM LOOK FOR TOMCAT..
REM If Tomcat was not installed using the installer - instead using a batch file
REM We have to look for the service instead
REM We cannot depend on the Registry key - HKLM\SOFTWARE\Apache Software Foundation\Tomcat
REM Instead, we have to look for it using the registry key
REM HKLM\SYSTEM\CurrentControlSet\services
REM However, we know Tomcat - could be tomcat5, tomcat6, or tomcat7
FOR /F "usebackq tokens=1" %%a in (`reg query "HKLM\SYSTEM\CurrentControlSet\services" ^| find /i "tomcat"`) do SET TomcatService=%%a
REM THANKS FOR THIS - https://stackoverflow.com/questions/17279114/split-path-and-take-last-folder-name-in-batch-script
set TomcatServiceName1=%TomcatService:~0,-1%
for %%f in (%TomcatServiceName1%) do set TomcatServiceName=%%~nxf
FOR /F "usebackq tokens=3" %%a in (`reg query "%TomcatService%" /v ImagePath`) do SET TomcatFolder=%%a
FOR /F "tokens=1-2,* delims=\" %%1 IN ("%TomcatFolder%") do Set TomcatLocation= %%1\%%2
REM Stop Service: Apache Tomcat
ECHO STOPPING SERVICE Apache Tomcat
NET STOP %TomcatServiceName%
ECHO CHECKING TO INSURE SERVICE Apache Tomcat IS STOPPED
NET START | FIND /I "Apache Tomcat"
IF NOT ERRORLEVEL 1 ECHO Apache Tomcat IS STARTED... STOPPING NOW
IF NOT ERRORLEVEL 1 NET STOP %TomcatServiceName%
ECHO DOUBLE-CHECKING TO INSURE SERVICE Apache Tomcat IS STOPPED
PING 127.0.0.1 -w 1 > NUL
NET START | FIND /I "Apache Tomcat"
IF ERRORLEVEL 1 ECHO Apache Tomcat IS STOPPED... GOOD TO GO
IF NOT ERRORLEVEL 1 ECHO Apache Tomcat IS STARTED...
REM -- SOME FAILURE IN STOPPING THE SERVICE, YOU WILL WANT TO EXIT
IF NOT ERRORLEVEL 1 GOTO END
PING 127.0.0.1 -w 1000 > NUL
REM DELETE LOGS - YOU DON'T WANT TO DELETE LOGS IN A PRODUCTION ENVIRONMENT
ECHO DEL Tomcat Log files
ECHO Y | DEL %TomcatLocation%\aa*.*
ECHO Y | DEL %TomcatLocation%\logs\*.*
ECHO DEL Log files
ECHO Y | DEL D:\logs\*.*
ECHO Y | DEL D:\bo_logs\*.*
REM DELETE FOLDER: %TomcatLocation%\work (Catalina Work Directory)
ECHO DELETING THE %TomcatLocation%\work DIRECTORY
RD /S/Q %TomcatLocation%\work
REM DELETE FOLDER: %TomcatLocation%\temp (Temp Directory)
ECHO DELETING THE %TomcatLocation%\temp DIRECTORY
RD /S/Q %TomcatLocation%\temp
IF NOT EXIST %TomcatLocation%\temp\. MD %TomcatLocation%\temp
REM START SERVICE: APACHE TOMCAT
ECHO STARTING Apache Tomcat
NET START | FIND /I "Apache Tomcat"
IF ERRORLEVEL 1 NET START %TomcatServiceName%
IF NOT ERRORLEVEL 1 ECHO Apache Tomcat IS ALREADY STARTED
PING 127.0.0.1 -w 1000 > NUL
ECHO.
ECHO PROCESS IS COMPLETE - VISUALLY DOUBLE CHECK TO INSURE
ECHO Apache Tomcat
ECHO ARE STARTED
REM ENABLE TOMCAT CHECK
SCHTASKS /QUERY|find /i "TCCheck">NUL
IF NOT ERRORLEVEL 1 SCHTASKS /CHANGE /TN "TCCheck" /ENABLE
GOTO END
:END
rem pause
EXIT
Another consideration for safety for use in a Scheduled Task.. You may want to insist the use of ARGS (Arguments) so that the files is not "automatically" invoked..
Consider..
SET /A ARGS_COUNT=0
FOR %%A in (%*) DO SET /A ARGS_COUNT+=1
REM ECHO %ARGS_COUNT%
If %ARGS_COUNT% == 0 GOTO END
If %ARGS_COUNT% == 1 GOTO CONTINUE
:CONTINUE
REM DISABLE TOMCAT CHECK
SCHTASKS /QUERY|find /i "TCCheck">NUL
IF NOT ERRORLEVEL 1 SCHTASKS /CHANGE /TN "TCCheck" /DISABLE
...
In your scheduled task, modify the Run to be (note the space after bat and 1).. D:\WORK\Scripts\res_tc.bat 1
Then, you must run the batch file from a command prompt as follows: res_tc.bat 1 or something like that.. If you run just a res_tc.bat with no ARGS, the fille will simply end with no execution. Hope this helps.
Note: THIS NEXT SECTION IS NOT RECOMMENDED IN A SCHEDULED TASK but for a stand-alone file. If you want relatively quick and reliable way to stop/start Apache Tomcat, you can do the following (near the top - note the add of CHOICE):
@ECHO OFF
CLS
CHOICE /C YN /M "DO YOU WANT TO RESTART APACHE TOMCAT WEB SERVICE?"
IF %ERRORLEVEL% == 2 GOTO END
REM DISABLE TOMCAT CHECK
SCHTASKS /QUERY|find /i "TCCheck">NUL
IF NOT ERRORLEVEL 1 SCHTASKS /CHANGE /TN "TCCheck" /DISABLE
...
Upvotes: 1
Views: 3757
Reputation: 70923
ECHO CHECKING FOR AND KILLING JAVA
TASKLIST | FIND /I "java.exe" && IF NOT %ERRORLEVEL% 1 TASKKILL /F /IM java.exe
if not %errorlevel% 1 ...
is not correct. Correct usages are
if not errorlevel 1 ...
if not %errorlevel%==1 ...
Upvotes: 1