tecci33
Goto Top

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.

Content-Key: 5908715804

Url: https://administrator.de/contentid/5908715804

Printed on: April 28, 2024 at 07:04 o'clock

Mitglied: 3063370895
3063370895 Feb 08, 2023 updated at 09:59:00 (UTC)
Goto Top
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ß
Mitglied: 5175293307
5175293307 Feb 08, 2023 updated at 09:55:20 (UTC)
Goto Top
pffff. Dafür hat man doch jederzeit sein Monitoring System in der Hinterhand dafür braucht man nicht mehr batchen face-wink.
Mitglied: 3063370895
3063370895 Feb 08, 2023 at 09:58:24 (UTC)
Goto Top
Zitat von @5175293307:

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

Und wenn man keins hat?
Member: Tecci33
Tecci33 Feb 08, 2023 at 09:58:30 (UTC)
Goto Top
Das soll nur als kleine Workarround Lösung für einen gewissen Zeitraum dienen.
Member: Tecci33
Tecci33 Feb 08, 2023 at 10:03:23 (UTC)
Goto Top
Zitat von @chaot1coz:

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?
Mitglied: 3063370895
3063370895 Feb 08, 2023 at 10:04:38 (UTC)
Goto Top
Zitat von @Tecci33:

Zitat von @chaot1coz:

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.
Mitglied: 5175293307
5175293307 Feb 08, 2023 updated at 10:06:28 (UTC)
Goto Top
Zitat von @chaot1coz:
Und wenn man keins hat?
Dann hat man ganz andere Probleme face-smile
Mitglied: 3063370895
3063370895 Feb 08, 2023 at 10:06:56 (UTC)
Goto Top
Zitat von @5175293307:

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

Danke für den wertvollen Beitrag
Mitglied: 5175293307
5175293307 Feb 08, 2023 updated at 10:10:21 (UTC)
Goto Top
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
Member: Tecci33
Tecci33 Feb 08, 2023 at 11:01:44 (UTC)
Goto Top
Zitat von @5175293307:

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

Danke für deinen Beitrag. Die anderen Forenbeiträge sind mir nicht entgangen, behandeln jedoch mein Thema nicht.
Member: Tecci33
Tecci33 Feb 08, 2023 at 11:09:05 (UTC)
Goto Top
Zitat von @chaot1coz:


Entweder das oder alles in ein Skript.

Eine Sache wäre noch zu erwähnen. Die Logs sind leider sehr groß.
Müsste man nach dem Copy eine kurze Pause setzen damit der Dienst nicht zu zeitig startet?
Ich vermute das der Startbefehl des Dienstes am Ende dann simultan mit dem Copy Befehl laufen würde und der Dienst letztlich nicht starten würde weil er quasi noch "in Verwendung" ist.
Hinweis: Das Log ist essentiell für den Dienst. Oder wäre es ratsam hier ein Sleep einzubauen?
Mitglied: 3063370895
3063370895 Feb 08, 2023 updated at 11:13:10 (UTC)
Goto Top
Der nächste Befehl nach Copy-Item wird erst ausgeführt wenn das Kopieren abgeschlossen ist.
Es wird ein Befehl nach dem anderen abgearbeitet.
Member: Tecci33
Tecci33 Feb 08, 2023 at 12:27:43 (UTC)
Goto Top
Zitat von @chaot1coz:

Der nächste Befehl nach Copy-Item wird erst ausgeführt wenn das Kopieren abgeschlossen ist.
Es wird ein Befehl nach dem anderen abgearbeitet.

Hey danke. Ich hab jetzt alles in ein Script gepackt und es funktioniert schon bestens face-smile
Nur eine Zeitverzögerung fehlt mir noch weil ein Dienst immer weitaus länger dauert bis er gestartet ist als die anderen. (Ursache liegt hier bei der Anwendung)
Wenn ich alle Dienste per Script starte/überwache kommt die Anwendung leider nicht hinterher.....
Das heißt ich müsste nach Start des ersten Dienstes ein Sleep oder Timeout nehmen. Hast du dafür auch noch eine Idee?
Member: em-pie
em-pie Feb 08, 2023 at 12:31:12 (UTC)
Goto Top
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"  
und über ein import-CSV gepart mit foreach() dann die csv auslesen...
Member: em-pie
em-pie Feb 08, 2023 updated at 12:35:35 (UTC)
Goto Top
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?

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- ...
Mitglied: 3063370895
3063370895 Feb 08, 2023 at 12:41:43 (UTC)
Goto Top
Für eine einfache Verzögerung
Start-Sleep -Seconds 10
Member: Tecci33
Tecci33 Feb 08, 2023 at 13:31:27 (UTC)
Goto Top
Zitat von @chaot1coz:

Für eine einfache Verzögerung
Start-Sleep -Seconds 10

Zitat von @em-pie:

lasse das Script erst weiterlaufen, wenn sichergestellt ist, dass der Dienst auch läuft:

So ist der aktuelle Stand, der bestens funktioniert.
Meiner Auffassung nach läuft der Prozess doch sowieso erst weiter wenn der Dienst gestartet wurde?
Falls nicht, an welcher Stelle wäre das Codeschnipsel zu ergänzen?


$logfile = "//SAXXXX/abc\update.log"  
$logdir = "C:\Users\XXX\Desktop\RESCUE\01 Updateserver"  
$servicename = "x_update"  

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
}

Start-Sleep -Seconds 10

$logfile = "//SAXXXX/abc\db.log"  
$logdir = "C:\Users\XXX\Desktop\RESCUE\02 Datenbankserver"  
$servicename = "x_db_1"  

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
}
Member: WoenK0
WoenK0 Feb 15, 2023 at 09:43:07 (UTC)
Goto Top
Zitat von @chaot1coz:

Zitat von @5175293307:

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

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.