Powershell - Überwachung und Neustart eines Tasks (KeepProcessAlive)

- 14.07.2014
von Thomas Windscheif / Microlinc



Zum Download

Manche Anwendungen verfügen programmseitig nicht über eine Möglichkeit als Dienst integriert zu werden.
Auch kann man manche Anwendungen nicht hart via "sc create" als Dienst integrieren, bzw. die Anwendungen reagieren nicht auf die Steuerungsanforderungen.

Eine mögliche Lösung wäre die Verwendung der Aufgabenplanung. Dies funktioniert soweit auch ganz gut. Aber bei Fehlern (z. B. Programmabsturz) wird der Task nicht automatisch neu gestartet (eine Option die man bei Diensten konfigurieren kann). Als Workaround habe ich ein Powershell-Skript geschrieben
welches ebenfalls als Task in Intervallen gestartet wird und im Verlauf das Vorhandensein eines definierbaren Prozesses überprüft. Sollte der Prozess nicht ausgeführt werden, wird über ein Aufruf mittels "schtasks" der "beendete Task" neu gestartet.
Sobald das Skript feststellt, dass der Prozess nicht mehr aktiv ist, wird eine Benachrichtigung per E-Mail versandt. Wenn der Prozess trotz Neustartversuch nicht startet, wird erneut eine Negativ-Meldung via E-Mail verschickt.

Voraussetzungen
- Der "Prüf"-Task muss mit Administrator-Rechten ausgeführt werden
(unter Windows Server 2008 R2; leider haben unprivilegierte Benutzer nicht das Recht mittels "schtasks" Tasks zu starten)
- Entweder deaktivieren Sie die ExecutionPolicy für Poweshell (http://technet.microsoft.com/en-us/library/hh849812.aspx) oder signieren Sie das Skript

Funktionsweise des Skripts
  1. Das Skript fragt via cmdlet "Get-Process" ab, ob ein definierbarer Prozess aktiv ist.

  2. Wenn der Prozess nicht aktiv ist, wird eine Info-E-Mail mit hoher Priorität an eine definierbare E-Mail-Adresse versandt

  3. Nachfolgend wird ein Neustart des definierbaren Tasks mittels "schtasks" versucht.

  4. Sollte dies scheitern, erfolgt eine weitere Info-Mail mit hoher Priorität.

  5. Sollte der Neustart erfolgreich gewesen sein, erfolgt eine normal priorisierte Benachrichtigung per E-Mail.


Anwendung
  1. Kopieren Sie das Powershell-Skript auf den Client/Server bei dem ein Prozess überwacht werden soll

  2. Erstellen Sie - sofern nicht bereits angelegt - in der Aufgabenplanung eine Aufgabe, welche die eigentliche Anwendung startet, die überwacht werden soll.
    Notieren Sie sich den Namen des Tasks.

  3. Erstellen Sie eine weitere Aufgabe in der Aufgabenplanung.


  4. Definieren Sie den Benutzer mit dessen Rechten der Task ausgeführt werden soll (Administrator-Rechte)

  5. In dem Reiter "Aktionen" klicken Sie auf "Neu..."



  6. Unter "Programm/Skript:" tragen Sie den Pfad zur Powershell-Anwendung an:
    Hier: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe


  7. Unter "Argumente hinzufügen (optional):" tragen Sie -command "PFAD und Dateiname des Powershell-Skripts" ein.
    Hier: -command "C:\sys\KeepProcessAlive.ps1"

  8. Unter dem Reiter "Trigger" legen Sie ein Intervall fest, wie oft das Skript ausgeführt werden soll bzw. wie oft eine Prüfung der Ausführung des Prozesses geprüft werden soll. (Aufgabe starten bei "Beim Start", Verzögern für: "20 Minuten", Wiederholen jede "10 Minuten", Für die Dauer von: "Sofort".

  9. Klicken Sie auf "OK", Sie werden zur Eingabe des Passworts für den hinterlegten Benutzers gebeten.

  10. Öffnen Sie die heruntergeladene Datei und ändern Sie die Werte der nachfolgenden Variablen entsprechend Ihrer Umgebung:
    1. processname: Hier tragen Sie den Namen des zu überwachenden Prozesses (siehe Taskmanager) ohne die Dateierweiterung an (z. B. für Explorer.exe geben Sie Explorer ein)

    2. smtpsrvname: Hier tragen Sie den DNS-Namen oder die IP-Adresse Ihres E-Mail-Servers ein.

    3. smtpport: Tragen Sie hier den Port für die SMTP-Schnittstelle des E-Mail-Servers ein (Standard: 25)

    4. mailsender: Tragen Sie hier die Absender-E-Mail-Adresse ein.

    5. mailreceiver: Tragen Sie hier die Empfänger-E-Mail-Adresse ein.

    6. starttask: Tragen Sie hier den Namen des Tasks (siehe Punkt 2) ein, welcher gestartet werden soll, sobald der Prozess nicht mehr ausgeführt wird




Ich habe das Skript in einer Windows Server 2008 R2-Umgebung getestet und keine Fehler festgestellt. Trotzdem sollten Sie das Skript zuvor in einer Testumgebung evaluieren. Sollten Sie Fehler entdecken oder Verbesserungsvorschläge haben, würde ich mich über Feedback von Ihnen freuen.

aktuelle Downloads
Download
-> KeepProcessAliveV1.3.zip (Version 1.3) ~ 1,19 KB
-> KeepProcessAliveV1.2.zip (Version 1.2) ~ 1,18 KB
MICROL!NC - URL zum Artikel: http://microlinc.homeip.net/index.php?lev1=7&lev2=14&id=231 - Ausdruck vom 18.04.2024