2016-04-20 7 views
2

Ich arbeite an einer Batch-Datei, in der ich einen Dienst und dann einen anderen beenden wollte und danach die Dienste gleichzeitig neu starten. Unten ist der Beispielcode:Batch-Datei für Dienste Starten und Stoppen

for /F "tokens=*" %%A in (servers_stop_All.txt) do (

echo %%A >> "log\MyService_stop_log_%datetime%.txt" 
sc \\%%A stop MyService >> "log\MYService_stop_log_%datetime%.txt") 


:CHECK1 

for /F "tokens=3 delims=: " %%H in ('sc query "MyService" ^| findstr " STATE"') do (
    if /I "%%H" EQU "STOPPED" (

    GOTO :STOP_JBOSS 
) ELSE (
GOTO :CHECK1 
) 
) 


:STOP_JBOSS 
for /F "tokens=*" %%A in (servers_stop_All.txt) do (
echo %%A >> "log\jboss_stop_log_%datetime%.txt" 

sc \\%%A stop jboss_qa >> "log\jboss_stop_log_%datetime%.txt" 
) 

Der erste Dienst beendet bekommen, aber es ist nicht in der Lage für den Zustand zu überprüfen und zur nächsten Aktivität gehen.

Antwort

0

Next-Code-Snippet könnte helfen (entscheidende Punkte kommentiert werden, finden Sie all rem in Code):

@ECHO OFF 
SETLOCAL EnableExtensions DisableDelayedExpansion 

rem obtain %datetime% variable in locale independent yyyymmddHHMMSS format 
for /f "tokens=2 delims==" %%G in (
    'wmic OS get localdatetime /value') do set "datetime=%%G" 
set "datetime=%datetime:~0,14%" 

rem loop: read server list and stop services 
for /F "tokens=*" %%A in (servers_stop_All.txt) do (
    set "server=%%A" 
    call :stopAService MyService 
    If errorlevel 1 (
     rem %server%: MyService unknown at all 
    ) else (
     rem %server%: MyService stopped succesfully 
     call :stopAService jboss_qa 
    ) 
    rem finish manipulation for particular server here 
) 
GOTO :continue 

:stopAService 
    rem subroutine to stop a service and wait until it's state is not STOPPED 
    rem input parameter: service name 
    echo %server% >> "log\%~1_stop_log_%datetime%.txt" 
    sc \\%server% stop %~1 >> "log\%~1_stop_log_%datetime%.txt") 
    rem  SC command would raise errorlevel >0 in case of no success 
    rem 1062: The service has not been started. 
    If %errorlevel% EQU 1062 exit /B 0 
    rem 1060: The specified service does not exist as an installed service. 
    If %errorlevel% EQU 1060 exit /B 1060 
:CHECK1 
    rem add some time to wait for state change from "STOP_PENDING" to "STOPPED"? 
    >NUL TIMEOUT /T 5 /NOBREAK 
    for /F "tokens=3 delims=: " %%H in ('sc query "%~1" ^| findstr "STATE"') do (
    if /I "%%H" EQU "STOPPED" (
     rem Success 
    ) ELSE (
     GOTO :CHECK1 
    ) 
) 
rem return from subroutine with exit code 0 
exit /B 0 

:continue 
rem finish script here 
+0

Ich habe versucht, dieses Skript auszuführen, nachdem notwendige Änderungen vorzunehmen, aber das funktioniert nicht. –

Verwandte Themen