2014-02-16 109 views
1

我看到这个帖子..
Batch runs manually but not in scheduled task任务计划程序运行Windows批处理文件

它不赢2008,但服务器2003

有一个关于时间计划任务..

不运行。无论是预定还是“询问”手动运行。

运行.. d:\工作\脚本\ res_tc.bat

具有与使用双冒号之前有问题“::”之前也曾尝试过用:REM代替 - 但是有没有不同。

运行方式: 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 

另一个考虑在计划任务使用。你可能需要坚持使用ARGS(参数)的安全,这样的文件是不是“自动”援引..

考虑..

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 
... 

在你的计划任务,修改运行为(注意蝙蝠后的空间和1).. D:\ WORK \ Scripts \ res_tc.bat 1

然后,您必须从命令提示符运行批处理文件,如下所示:res_tc.bat 1或类似的东西..如果您只运行一个res_tc.bat没有ARGS,fille只会以不执行而结束。希望这可以帮助。

注意:此下一部分不建议在调度任务中,但是对于独立文件。如果你想相对快速和可靠的方式来启动/停止的Apache Tomcat,你可以做以下(靠近顶部 - 注意选择的附加):

@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 
... 
+0

只是增值业务的位置更大的注册表检测,安装文件夹和服务名称,使这项工作与Apache Tomcat上的任何更新版本。 – Leptonator

回答

1
ECHO CHECKING FOR AND KILLING JAVA 
TASKLIST | FIND /I "java.exe" && IF NOT %ERRORLEVEL% 1 TASKKILL /F /IM java.exe 

if not %errorlevel% 1 ...是不正确的。正确的用法是

if not errorlevel 1 ... 
if not %errorlevel%==1 ... 
+0

谢谢你。现在奇妙地工作。 – Leptonator

相关问题