Dienste stoppen und neu starten und Errorhandling
Hallo,
ich möchte mehrere Dienste per Batch auf einem W2k3 Server täglich neu starten lassen.
Dazu habe ich mir eine for Schleife gebaut, die die Dienste auch stoppt und startet und auch ein Logfile schreibt.
Ich möchte aber, dass auch sichergestellt ist, dass erst alle Dienste gestoppt und anschliessend gestartet werden.
Kann mir einer von Euch eine Denkanstoss geben...
Hier noch mein Auszug aus dem Batch
:: Umgebungsvariable setzen
set jahr=%date:~6,4%
set monat=%date:~3,2%
set tag=%date:~0,2%
set stunde=%time:~0,2%
set minute=%time:~3,2%
set sekunde=%time:~6,2%
set logfile="PFAD\%jahr%%monat%%tag%_%stunde%%minute%.log"
::Zeitangabe für stoppen mitgeben
echo --------------------------------- >> %logfile%
echo %date% - %stunde%:%minute%:%sekunde% Uhr >> %logfile%
echo --------------------------------- >> %logfile%
::Dienstestop und Auslesen des Dienststatus
for %%f in (Dienst1 Dienst2 ....Dienst32) do (
sc stop %%f
sleep 3
for /F "tokens=2" %%g in ('sc query %%f ^|findstr %%f') do for /F "tokens=4" %%h in ('sc query %%f ^|findstr STATE') do @echo %%h %%g >> %logfile%
)
echo --------------------------------- >> %logfile%
Dienstestart und Auslesen des Dienststatus
for %%f in ( Dienst1 Dienst2 ....Dienst32) do (
sc start %%f
sleep 3
for /F "tokens=2" %%g in ('sc query %%f ^|findstr %%f') do for /F "tokens=4" %%h in ('sc query %%f ^|findstr STATE') do @echo %%h %%g >> %logfile%
)
:eof
ich möchte mehrere Dienste per Batch auf einem W2k3 Server täglich neu starten lassen.
Dazu habe ich mir eine for Schleife gebaut, die die Dienste auch stoppt und startet und auch ein Logfile schreibt.
Ich möchte aber, dass auch sichergestellt ist, dass erst alle Dienste gestoppt und anschliessend gestartet werden.
Kann mir einer von Euch eine Denkanstoss geben...
Hier noch mein Auszug aus dem Batch
:: Umgebungsvariable setzen
set jahr=%date:~6,4%
set monat=%date:~3,2%
set tag=%date:~0,2%
set stunde=%time:~0,2%
set minute=%time:~3,2%
set sekunde=%time:~6,2%
set logfile="PFAD\%jahr%%monat%%tag%_%stunde%%minute%.log"
::Zeitangabe für stoppen mitgeben
echo --------------------------------- >> %logfile%
echo %date% - %stunde%:%minute%:%sekunde% Uhr >> %logfile%
echo --------------------------------- >> %logfile%
::Dienstestop und Auslesen des Dienststatus
for %%f in (Dienst1 Dienst2 ....Dienst32) do (
sc stop %%f
sleep 3
for /F "tokens=2" %%g in ('sc query %%f ^|findstr %%f') do for /F "tokens=4" %%h in ('sc query %%f ^|findstr STATE') do @echo %%h %%g >> %logfile%
)
echo --------------------------------- >> %logfile%
Dienstestart und Auslesen des Dienststatus
for %%f in ( Dienst1 Dienst2 ....Dienst32) do (
sc start %%f
sleep 3
for /F "tokens=2" %%g in ('sc query %%f ^|findstr %%f') do for /F "tokens=4" %%h in ('sc query %%f ^|findstr STATE') do @echo %%h %%g >> %logfile%
)
:eof
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 181448
Url: https://administrator.de/forum/dienste-stoppen-und-neu-starten-und-errorhandling-181448.html
Ausgedruckt am: 08.04.2025 um 21:04 Uhr
11 Kommentare
Neuester Kommentar
Moin,
ich helf mal mit der Formatierung
(siehe unten)
kann es sein das mehr als zweimal code Formartierungen nicht gehen?
Mal so ganz blöde gefragt: du liest doch schon den Status der Dienste aus. Wenn der nicht 1 ist, ist der Dienste nicht angehalten :? Vor allem, was soll denn passieren wenn er nicht angehalten ist? Willst Du dann das script anhalten? Den Server neu starten?
Du kannst
doch gerade noch einmal laufen lassen, und musst nur prüfen ob der Status für den Dienst gleich 1 ist. Wenn nicht .... siehe oben
Gruß
Nagus
Und hier wie's aussehen soll: ned die Lösung aber von der Formatierung
ich helf mal mit der Formatierung
kann es sein das mehr als zweimal code Formartierungen nicht gehen?
Mal so ganz blöde gefragt: du liest doch schon den Status der Dienste aus. Wenn der nicht 1 ist, ist der Dienste nicht angehalten :? Vor allem, was soll denn passieren wenn er nicht angehalten ist? Willst Du dann das script anhalten? Den Server neu starten?
Du kannst
for /F "tokens=2" %%g in ('sc query %%f ^|findstr %%f') do for /F "tokens=4" %%h in ('sc query %%f ^|findstr STATE') do @echo %%h %%g >> %logfile%
doch gerade noch einmal laufen lassen, und musst nur prüfen ob der Status für den Dienst gleich 1 ist. Wenn nicht .... siehe oben
Gruß
Nagus
Und hier wie's aussehen soll: ned die Lösung aber von der Formatierung
:: Umgebungsvariable setzen
set jahr=%date:~6,4%
set monat=%date:~3,2%
set tag=%date:~0,2%
set stunde=%time:~0,2%
set minute=%time:~3,2%
set sekunde=%time:~6,2%
set logfile="PFAD\%jahr%%monat%%tag%_%stunde%%minute%.log"
::Zeitangabe für stoppen mitgeben
echo --------------------------------- >> %logfile%
echo %date% - %stunde%:%minute%:%sekunde% Uhr >> %logfile%
echo --------------------------------- >> %logfile%
::Dienstestop und Auslesen des Dienststatus
for %%f in (Dienst1 Dienst2 ....Dienst32) do (
sc stop %%f
sleep 3
for /F "tokens=2" %%g in ('sc query %%f ^|findstr %%f') do for /F "tokens=4" %%h in ('sc query %%f ^|findstr STATE') do @echo %%h %%g >> %logfile%
)
echo --------------------------------- >> %logfile%
Dienstestart und Auslesen des Dienststatus
for %%f in ( Dienst1 Dienst2 ....Dienst32) do (
sc start %%f
sleep 3
for /F "tokens=2" %%g in ('sc query %%f ^|findstr %%f') do for /F "tokens=4" %%h in ('sc query %%f ^|findstr STATE') do @echo %%h %%g >> %logfile%
)
:eof

Moin,
Ot
/ot
Gruss
Ot
1
2
3
4
Gruss

Moin,
Salve
Nee nee schreiben wir mal andersherum, der TO wäre klüger beraten, wenn er nicht nur den Tipp von André anwenden würde, sondern auch - wenn er statt in zwei Blöcken jeweils Dienst1 Dienst2 Dienst3 reinmalt diese Dienstabsuche in einer separaten ini für beide Blöcke und mit nur einer Anpassung machen würde.
Feeddbäck in irgendeine Richtung wäre eigentlich auch ne Lösung
gruß
Salve
Nee nee schreiben wir mal andersherum, der TO wäre klüger beraten, wenn er nicht nur den Tipp von André anwenden würde, sondern auch - wenn er statt in zwei Blöcken jeweils Dienst1 Dienst2 Dienst3 reinmalt diese Dienstabsuche in einer separaten ini für beide Blöcke und mit nur einer Anpassung machen würde.
Feeddbäck in irgendeine Richtung wäre eigentlich auch ne Lösung
gruß
Moin,
dann würde ich das anders machen:
fetisch .... so würde ich die logig umsetzen. mit deiner Schleife hast Du ja schon alles, musst es nur noch ausfeilen.
Aber mal ne ganz andere Frage: wäre es nicht besser und einfacher den Server neu zu starten und das nur einmal pro Woche oder so?
Wenn das mit den Dienste nämlich nicht geht, steht die Maschine u.U. ja auch ...
Gruß
Nagus
dann würde ich das anders machen:
- : Timo anwenden, d.h. am Anfang die Dienste definieren
- : den Status der Dienste abfragen --> hast du ja schon im Prinzip
- : definierte Dienste stoppen und warten ... das kann ja länger dauern
- : Status der Dienste abfragen, wenn der Dienst nicht 1 ist fehler setzen und ggf. hochzählen, nochmal versuchen
- : Dienste starten und den Zustand abfragen, wenn 1 email an Admin
fetisch .... so würde ich die logig umsetzen. mit deiner Schleife hast Du ja schon alles, musst es nur noch ausfeilen.
Aber mal ne ganz andere Frage: wäre es nicht besser und einfacher den Server neu zu starten und das nur einmal pro Woche oder so?
Wenn das mit den Dienste nämlich nicht geht, steht die Maschine u.U. ja auch ...
Gruß
Nagus

Salve
- Timo meint, wenn du da was anpassen willst, mußt du Zeile 16 & Zeile 25 anpassen - jagst du die schleife(n) über eine Textdatei, mußt du die nur einmal anpassen.
- 3 naja -was für dienste sind das denn überhaupt?
- 4 ist die Batch und die Dienststoppkiste überhaupt das gleiche "Blech"?
- 5 naja.... da halte ich es mit dem Kollegen André
Hilfe kommt später, nachdem du unsere <code></code>-Formatierung gefunden hast, bei Plaintext liest mein Hirn nur ...
- 5b Die Dienstnamen unterscheiden sich vom angezeigten "Dienstnamen" unter Dienste.