Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dienste stoppen und neu starten und Errorhandling

Frage Entwicklung Batch & Shell

Mitglied: Maiwald

Maiwald (Level 1) - Jetzt verbinden

05.03.2012, aktualisiert 16:08 Uhr, 4338 Aufrufe, 11 Kommentare

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
Mitglied: Skyemugen
05.03.2012 um 17:27 Uhr
Aloha,

Hilfe kommt später, nachdem du unsere <code></code>-Formatierung gefunden hast, bei Plaintext liest mein Hirn nur ...

greetz André
Bitte warten ..
Mitglied: Nagus
05.03.2012 um 17:48 Uhr
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
01.
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% 
02.
 
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

01.
:: Umgebungsvariable setzen 
02.
set jahr=%date:~6,4% 
03.
set monat=%date:~3,2% 
04.
set tag=%date:~0,2% 
05.
set stunde=%time:~0,2% 
06.
set minute=%time:~3,2% 
07.
set sekunde=%time:~6,2% 
08.
set logfile="PFAD\%jahr%%monat%%tag%_%stunde%%minute%.log" 
09.
 
10.
::Zeitangabe für stoppen mitgeben 
11.
echo --------------------------------- >> %logfile% 
12.
echo %date% - %stunde%:%minute%:%sekunde% Uhr >> %logfile% 
13.
echo --------------------------------- >> %logfile% 
14.
 
15.
::Dienstestop und Auslesen des Dienststatus 
16.
for %%f in (Dienst1 Dienst2 ....Dienst32) do ( 
17.
sc stop %%f 
18.
sleep 3 
19.
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% 
20.
21.
 
22.
echo --------------------------------- >> %logfile% 
23.
 
24.
Dienstestart und Auslesen des Dienststatus 
25.
for %%f in ( Dienst1 Dienst2 ....Dienst32) do ( 
26.
sc start %%f 
27.
sleep 3 
28.
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% 
29.
30.
 
31.
:eof
Bitte warten ..
Mitglied: 60730
05.03.2012 um 20:21 Uhr
Moin,
Ot
Zitat von Nagus:
Moin,
kann es sein das mehr als zweimal code Formartierungen nicht gehen?
/ot

Gruss
Bitte warten ..
Mitglied: Nagus
06.03.2012 um 13:41 Uhr
Hi Timo,
OT
ich bin zu doof ... egal
/OT

Gruß
Nagus
Bitte warten ..
Mitglied: 60730
06.03.2012 um 14:01 Uhr
Moin,

Zitat von Nagus:
Hi Timo,

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ß
Bitte warten ..
Mitglied: Maiwald
06.03.2012 um 21:08 Uhr
Hallo Nagus,

danke für die Formatierung
Werde ich beim nächsten Mal beachten.

Hier nochmal mein Gedankengang:

1. Dienste stoppen (ist mit diesem Skript schon getan)
2. Wenn Dienst 1 oder Dienst 32 nicht gestoppt ist, sollte eine Fehlerroutine diesen stoppen. Dies sollte 3x versucht werden. Erst dann sollte der nächste Dienst gestoppt werden.
3. Starten aller Dienste. Hier sollte ebenfalls eine Überprüfung eingebaut werden (wenn Dienst 1 nicht gestartet wurde, dann versuche dies 3 x und springe anschliessend zum nächsten Dienst)
4. Alles sollte natürlich auch weiterhin protokolliert werden.

Ich hoffe mich ein wenig verständlicher ausgedrückt zu haben.

Schönen Abend

Mario
Bitte warten ..
Mitglied: Nagus
07.03.2012 um 21:13 Uhr
Moin,
dann würde ich das anders machen:
  1. : Timo anwenden, d.h. am Anfang die Dienste definieren
  2. : den Status der Dienste abfragen --> hast du ja schon im Prinzip
  3. : definierte Dienste stoppen und warten ... das kann ja länger dauern
  4. : Status der Dienste abfragen, wenn der Dienst nicht 1 ist fehler setzen und ggf. hochzählen, nochmal versuchen
  5. : 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
Bitte warten ..
Mitglied: Maiwald
07.03.2012 um 22:52 Uhr
Hallo Nagus,

danke für die Anregungen

zu 1. verstehe nicht was Timo damit meint
zu 3. das Stoppen und Starten der Dienste dauert jetzt ca 4 Minuten. Das habe ich im Log ausgelesen...
zu 4. wie sollte das am besten gemacht werden? KAnnst du mal einen Tipp geben, wie die Abfrage aussehen soll. Wenn ich mich nicht täusche, könnte auch ein Taskill meinen Prozess stoppen und somit auch den Dienst stoppen oder irre ich da?
zu 5. Das mit der Mail habe ich mir auch so gedacht. Die Dienste werden eh überwacht und ich bekomme schon eine Mail. Nur möchte ich diese zur Sicherheit beim Fehlversuch ein zweites Mal starten. Hier bräuhte ich einen Ansatz, wie ich das am Besten machen könnte.

Der Serverreboot dauert ca 15 Minuten, bis dieser wieder Anfragen verarbeiten kann. Ich habe dieVorgabe bekommen, den Server nur am Wochenende neu zu starten und unter der Woche sollen nur die Dienste gestartet werden.
Eine Frage zu der for Schleife habe ich noch. Gibt es eine Möglichkeit, die Dienste 1-32 nicht so aufzulisten (for %%f in (Dienst1 Dienst2 ....Dienst32), sondern sich diese per Variable zu holen for %%f in ($Dienste). Die Dienstnamen unterscheiden sich vom angezeigten "Dienstnamen" unter Dienste.

Schönen Abend noch

Gruß
Mario
Bitte warten ..
Mitglied: 60730
07.03.2012 um 23:16 Uhr
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.
Diese Namen sind doch nur Schall & Rauch, die Anzeigenamen nutzt doch keiner....
Bitte warten ..
Mitglied: Maiwald
08.03.2012 um 22:44 Uhr
Hallo,

das mit den Dienstnamen aus der Datei herauslesen habe ich hinbekommen

01.
set "config_dienste=D:\Test\dienste.conf" 
02.
 
03.
for /f "usebackq tokens=1" %%f in ("%config_dienste%") do ( 
04.
sc stop %%f  
05.
sleep 3  
06.
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%  
07.
) 
Zitat von Nagus:
  • Status der Dienste abfragen, wenn der Dienst nicht 1 ist fehler setzen und ggf. hochzählen, nochmal versuchen
Wie wird das gemacht? Kannst du mir ein Denkanstoss geben
Schön wäre es auch, wenn nach dem 2 Vesuch der Dienst gekillt wird (taskill)
  • Dienste starten und den Zustand abfragen, wenn 1 email an Admin
Dienst Starten habe ich ja ach schon geschrieben, lediglich das mit dem Errorlevel fehlt mir
  • 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?
Geht leider nicht.. Vorgabe vom Hersteller - Dienste müssen gestartet werden


Gruß
Mario
Bitte warten ..
Mitglied: Maiwald
15.03.2012 um 16:57 Uhr
Hallo,

hat noch jemand eine Idee, wie ich den Errorlevel abfragen kann

Gruß
Mario
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...