Windows Dienste per Batch überwachen
Hallo werte Fachgemeinde,
vll. kann mir hier jemand weiterhelfen.
Wir betreiben einen Server (Windows Server 2019) auf dem eine Anwendung läuft.
Die Anwendung wiederum ist Abhängig von verschiedenen Windows Diensten, die ab und zu mal ausfallen. (warum genau wird noch analysiert). Als Workarround soll es das Ziel sein eine Batch zu entwickeln, die mehrere Windows Dienste (insgesamt 4) in einem Zyklus von 30 Sekunden überwacht und für den Fall das ein Dienst ausfällt/gestoppt wird soll als erstes ein bestimmtes Logfile (anwendungsinternes Log vom Dienst) in einen neu anzulegenden Ordner (mit Timestamp Datum, Minuten und Sekunden) kopiert werden und erst danach soll der betreffende Dienst wieder gestartet werden.
Abschließend würde ich die Batch dann als eigenständigen Windows Dienst konfigurieren und mitlaufen lassen.
Hat jemand Ideen und Anregungen dazu wie man so etwas per Batch umsetzen könnte?
Vielen Dank vorab schonmal.
vll. kann mir hier jemand weiterhelfen.
Wir betreiben einen Server (Windows Server 2019) auf dem eine Anwendung läuft.
Die Anwendung wiederum ist Abhängig von verschiedenen Windows Diensten, die ab und zu mal ausfallen. (warum genau wird noch analysiert). Als Workarround soll es das Ziel sein eine Batch zu entwickeln, die mehrere Windows Dienste (insgesamt 4) in einem Zyklus von 30 Sekunden überwacht und für den Fall das ein Dienst ausfällt/gestoppt wird soll als erstes ein bestimmtes Logfile (anwendungsinternes Log vom Dienst) in einen neu anzulegenden Ordner (mit Timestamp Datum, Minuten und Sekunden) kopiert werden und erst danach soll der betreffende Dienst wieder gestartet werden.
Abschließend würde ich die Batch dann als eigenständigen Windows Dienst konfigurieren und mitlaufen lassen.
Hat jemand Ideen und Anregungen dazu wie man so etwas per Batch umsetzen könnte?
Vielen Dank vorab schonmal.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5908715804
Url: https://administrator.de/forum/windows-dienste-per-batch-ueberwachen-5908715804.html
Ausgedruckt am: 13.03.2025 um 11:03 Uhr
18 Kommentare
Neuester Kommentar

Hi,
Ich würde das mit Powershell und geplanten Aufgaben umsetzen.
Sowas in der Art (ungetestet):
im Minutentakt als geplante Aufgabe
Gruß
Ich würde das mit Powershell und geplanten Aufgaben umsetzen.
Sowas in der Art (ungetestet):
$logfile = "c:\dein\logfile.txt"
$logdir = "\\server\logordner"
$servicename = "dienstname"
if((Get-Service $servicename).Status -ne "Running"){
$timestamp = Get-Date -Format "yyyy-MM-dd HH.mm.ss"
New-Item -ItemType Directory -Path "$logdir\$timestamp"
Copy-Item -Path $logfile -Destination "$logdir\$timestamp\"
Start-Service $servicename
}
im Minutentakt als geplante Aufgabe
Gruß

pffff. Dafür hat man doch jederzeit sein Monitoring System in der Hinterhand dafür braucht man nicht mehr batchen
.

Zitat von @5175293307:
pffff. Dafür hat man doch jederzeit sein Monitoring System in der Hinterhand dafür braucht man nicht mehr batchen
.
pffff. Dafür hat man doch jederzeit sein Monitoring System in der Hinterhand dafür braucht man nicht mehr batchen
Und wenn man keins hat?

Zitat von @Tecci33:
Super, danke dir. Nur es sind 4 Dienste zu überwachen. (mit jeweils anderen Logfile Locations) Ist dann je Dienst ein PS File zu erstellen und dann je PS File eine Aufgabe zu definieren?
Zitat von @chaot1coz:
Hi,
Ich würde das mit Powershell und geplanten Aufgaben umsetzen.
Sowas in der Art (ungetestet):
im Minutentakt als geplante Aufgabe
Gruß
Hi,
Ich würde das mit Powershell und geplanten Aufgaben umsetzen.
Sowas in der Art (ungetestet):
$logfile = "c:\dein\logfile.txt"
$logdir = "\\server\logordner"
$servicename = "dienstname"
if((Get-Service $servicename).Status -ne "Running"){
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
New-Item -ItemType Directory -Path "$logdir\$timestamp"
Copy-Item -Path $logfile -Destination "$logdir\$timestamp\"
Start-Service $servicename
}
im Minutentakt als geplante Aufgabe
Gruß
Super, danke dir. Nur es sind 4 Dienste zu überwachen. (mit jeweils anderen Logfile Locations) Ist dann je Dienst ein PS File zu erstellen und dann je PS File eine Aufgabe zu definieren?
Entweder das oder alles in ein Skript.

Zitat von @chaot1coz:
Und wenn man keins hat?
Dann hat man ganz andere Probleme Und wenn man keins hat?

Zitat von @5175293307:

Zitat von @chaot1coz:
Und wenn man keins hat?
Dann hat man ganz andere Probleme Und wenn man keins hat?
Danke für den wertvollen Beitrag

Naja zu der TO scheint nur faul zu suchen, is ja nicht so als das er der erste wäre ...
https://administrator.de/latest/?search=Dienst+%C3%BCberwachen
https://administrator.de/latest/?search=Dienst+%C3%BCberwachen

Der nächste Befehl nach Copy-Item wird erst ausgeführt wenn das Kopieren abgeschlossen ist.
Es wird ein Befehl nach dem anderen abgearbeitet.
Es wird ein Befehl nach dem anderen abgearbeitet.
Super, danke dir. Nur es sind 4 Dienste zu überwachen. (mit jeweils anderen Logfile Locations) Ist dann je Dienst ein PS File zu erstellen und dann je PS File eine Aufgabe zu definieren?
Entweder das oder alles in ein Skript.
Oder aber das Script mit einem Parameter (z. B. Dienstname) ausführen und den Parameter dann mit einer if-Abfrage (oder Case()) verwenden, damit die richtigen Pfade gesetzt werden
Oder aber eine csv daneben legen
Service;logfile;logfolder
Dienst1;"C:\myLogs\service1\thelogfile.txt";"\server\Shares\services\SVCA"
Dienst2;"C:\tmp\anotherlogfile.txt";"\server\Shares\services\SVCA"
Dienst3;"C:\app\logs\logfile.txt";"\server\Shares\services\SVCA"
Dienst4;"C:\recycle.bin\emptyfile.txt";"\server\Shares\services\SVCA"
import-CSV
gepart mit foreach()
dann die csv auslesen...Zitat von @Tecci33:
Das heißt ich müsste nach Start des ersten Dienstes ein Sleep oder Timeout nehmen. Hast du dafür auch noch eine Idee?
Das heißt ich müsste nach Start des ersten Dienstes ein Sleep oder Timeout nehmen. Hast du dafür auch noch eine Idee?
lasse das Script erst weiterlaufen, wenn sichergestellt ist, dass der Dienst auch läuft:
$arrService = Get-Service -Name $ServiceName
if ($arrService.Status -eq 'Running'){
#Start des nächsten Dienstes
}
Quelle: https://stackoverflow.com/questions/35064964/powershell-script-to-check- ...

Für eine einfache Verzögerung
Start-Sleep -Seconds 10
Zitat von @chaot1coz:
Und wenn man keins hat?
Zitat von @5175293307:
pffff. Dafür hat man doch jederzeit sein Monitoring System in der Hinterhand dafür braucht man nicht mehr batchen
.
pffff. Dafür hat man doch jederzeit sein Monitoring System in der Hinterhand dafür braucht man nicht mehr batchen
Und wenn man keins hat?
Wäre das der richtige Moment sich eines zuzulegen.
Workarounds für "kurze Zeit" haben die dumme Angewohnheit zu einer Dauerlösung zu werden.
Ich persönlich finde es auch vorteilhaft Drucker im Monitoring zu haben, hat mir schon sehr viele Wege gespart wo ich dann hätte nur Papier nachfüllen müssen.
Aber bei Servern sollte das schon Pflicht sein....bei Microsoft hängt viel zu oft etwas oder Dienste werden für ein Update deaktiviert und bleiben es danach seltsamerweise (jeder der schon mal einen Exchange 2019 mit deaktivierter Indizierung vor sich hatte will das nicht noch mal haben)...
Einrichten vom Monitoring ist auch nicht sooo aufwendig....
CheckMK RAW reicht für kleine Netze vollkommen aus, kostet nix und die Grundeinrichtung dauert 2-3 Stunden.
Verfeinern kann man danach immer, aber für gröbste optimal.
Und der echte Mehrwert eines Monitorings ist die Zeitersparnis die man dadurch hat...man hat Ausfälle sofort im Blick und einen Überblick über die Auslastung und Entwickling.