Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Dienste stoppen und neu starten und Errorhandling

Mitglied: Maiwald

Maiwald (Level 1) - Jetzt verbinden

05.03.2012, aktualisiert 16:08 Uhr, 4626 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 ..
Ähnliche Inhalte
Batch & Shell
Powershell: Dienst - Starten, Stoppen und Status Abfragen
gelöst Frage von SaschaRDBatch & Shell2 Kommentare

Hallo zusammen, habe das Starten, Stoppen und die Abfrage des Status (inkl. Error-Handling) eines Dienstes zusammengelegt, jedoch hängt er ...

Exchange Server
Exchange 2013 sicher stoppen und starten
gelöst Frage von wixmixbinExchange Server12 Kommentare

Hallo Admins, ich mache vor jeder Installation von Windows Updates auf Windows Server 2012 ein Snapshot. UPDATE: VM läuft ...

Windows 7
Dienst per Aufgabenplanung nach login neu starten
Frage von maniacmacpainWindows 714 Kommentare

Hallo, gleich vorab, ich habe verschiedene "HowTos" usw. zu diesem Thema gefunden, aber es funktioniert einfach nicht. Ich habe ...

Windows Server
SBS 2011 - Mehrere Dienste stoppen periodisch
Frage von derheckiWindows Server9 Kommentare

Auslöser für das Stoppen der Dienste ist ein Application-Error 1000 betreffend svchost.exe_wuauserv - Fehlerhaftes Modul wuaueng.dll Name der fehlerhaften ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 8 StundenRouter & Routing2 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 15 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 19 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

Sonstige Systeme
7-zip: Programm frägt nach Passwort erst bei einzelnen Dateien
Frage von freeskierchrisSonstige Systeme7 Kommentare

Guten Morgen, ich habe ein Problem beim Arbeiten mit 7-zip: Wenn ich die einzelnen Dateien zu einem Archiv verpacke ...