xm-bit
Goto Top

Prozess im Taskmanager überprüfen

Ich möchte einen Prozess im Taskmanager überprüfen ob dieser läuft.
Wenn er nicht läuft, dann soll dieser gestartet werden, und das Ergebnis des Neustarts in einer Log-Datei abgelegt werden.

Hi,

wir haben bei uns einen Prozess, der in regelmäßigen Abständen überprüft werden solll, ob dieser auch richtig läuft.
Wenn sich dieser Prozess aufgehängt haben sollte, soll er neu gestartet werden.
Dieser Neustart soll dann in einer Log-Datei gespeichert werden.

Das ganze würde ich gerne per windows scripting realisieren wollen.

Als einfache Lösung habe ich schon eine Batchdatei mit findstr.
Find ich aber nicht so schön...

Aber ich würde das gerne per wsh lösen. Da aber meine WSH Kenntnisse sich gerade mal bei Grundkenntnissen bewegen, wollte ich euch mal fragen, ob ihr mir da ein wenig unter die Arme greifen könnt.

Das wäre echt klasse...

mfg
Sascha

Content-Key: 114340

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

Printed on: April 24, 2024 at 22:04 o'clock

Member: over23
over23 Apr 21, 2009 at 11:35:22 (UTC)
Goto Top
Hallo,

ich würde das mit einem Powershell-Skript lösen.

$prozess = Get-Process Prozessname

Mit $prozess.Responding kann abgefragt werden, ob der Prozess noch reagiert. Es wird true oder false zurückgegeben.

In Kombination mit einer if-Schleife sollte es kein Problem sein, den Prozess gegebenenfalls neu zu starten.
Member: xm-bit
xm-bit Apr 21, 2009 at 12:57:05 (UTC)
Goto Top
Hi, danke dir für deine schnelle Antwort.

Aber mit der Powershell, habe ich mich noch nicht so intensiv beschäftigt.
Gensauso wie mit schleifen.
Die Funktionsweise einer schleife verstehe ich ja. Aber das umsetzen, da hapert es bei mir.

Theoretisch soll es so aussehen:

Prüfen ob eine Datei namens xy.exe gestartet ist und käuft.

Wenn nicht, dann starte datei xy.exe
schreibe den start der Datei mit einem Zeitstempel in eine Log-Datei.

Läuft diese Datei schon, mache nix und beende das Programm.

Edit:
mittlerweile habe ich es soweit wie hier:
pc = "localhost"

Set wmi = GetObject("winmgmts:\\" & pc & "\root\cimv2:Win32_Process")

returncode = wmi.Create("calc.exe", Null, Null, ProcessID)
MsgBox "Returncode: " & returncode & " Prozess-ID: " & ProcessID

Aber das startet mir nur die Datei. Wie baue ich dort eine if Anweisung ein, das wenn diese datei gestartet ist. Das nix passiert...


mfg
Sascha
Member: over23
over23 Apr 21, 2009 at 18:11:12 (UTC)
Goto Top
Hallo,

ich hätte es so gelöst

$liste = ps
If ($liste -match "xy") {  
  $prozess = Get-Process xy
  If ($prozess.Responding -match "False") {  
    Stop-Process -name "xy"  
    C:\Pfad\xy.exe
    Date >>C:\Irgendwo\log.txt
  }
}
else {
C:\Pfad\xy.exe
}

xy durch den Prozessnamen und C:\Pfad bzw. C:\Irgendwo durch den entsprechenden Pfad ersetzen

Die erste If-Schleife prüft, ob Prozess xy läuft, wenn nein wird er gestartet, wenn ja wird geprüft ob er reagiert.
Wenn er nicht reagiert, wird er beendet, neu gestartet und das Datum in die log.txt geschrieben.
Member: xm-bit
xm-bit Apr 21, 2009 at 18:57:11 (UTC)
Goto Top
Hi Over23,


danke schön.

Dann werd ich das morgen früh gleich mal testen.
Ich meld mich dann, wie es ausgegangen ist.

mfg
Sascha
Member: xm-bit
xm-bit Apr 22, 2009 at 08:11:21 (UTC)
Goto Top
Moin moin over23,

das sieht soweit schon mal ganz gut aus. Aber ich bekomme keinerlei Einträge in die Log-Datei. Hab alles so umgesetzt wie du es beschrieben hast.

Woran kann es denn liegen???

mfg
Sascha
Member: over23
over23 Apr 22, 2009 at 08:39:49 (UTC)
Goto Top
Guten Morgen Sascha,

momentan schreibt er ja nur in die Log-Datei, wenn sich der Prozess aufgehängt hat und ihn dann neu startet. Wenn der Prozess nicht vorhanden ist und "nur" gestartet wird, gibt es keinen Eintrag.

Solltest du das getestet haben und es trotzdem nicht funktionieren, poste ich dir nacher nochmal was, wenn ich im Büro bin.
Member: xm-bit
xm-bit Apr 22, 2009 at 08:51:28 (UTC)
Goto Top
Hi over23,

danke.
Momentan schreibt er ja nichts ins Logfile. Nur es läßt sich ein aufgehangener Prozess schlecht simulieren. face-smile

Wie kann ich in Powershell denn Text mit übergeben, bin gerade dabei das heruaszufinden. Ist nicht gerade einfach. face-smile

Aber mit den richtigen Hilfen, sollte das schon klappen.
Dann warte ich mal bis du im Büro bist.

mfg
Sascha
Member: over23
over23 Apr 22, 2009 at 11:12:45 (UTC)
Goto Top
So, hier bin ich nochmal

$liste = ps
$date = date
$ok = "Alles in Ordnung"  
$gestartet = "Prozess gestartet"  
$neu_gestartet = "Prozess neu gestartet"  
If ($liste -match "xy") {  
  $prozess = Get-Process xy
  If ($prozess.Responding -match "False") {  
    Stop-Process -name "xy"  
    C:\Pfad\xy.exe
    "$date | $neu_gestartet" >>C:\Irgendwo\log.txt  
  }
  else {
  "$date | $ok" >>C:\Irgendwo\log.txt  
  }
}
else {
C:\Pfad\xy.exe
"$date | $gestartet" >>C:\Irgendwo\log.txt  
}

Probiers mal so
Member: xm-bit
xm-bit Apr 22, 2009 at 11:37:45 (UTC)
Goto Top
Hi over23,

das sieht schon besser aus. Aber wenn sich die Datei aufgehängt hat, wird es nicht gemeldet.
Besteht jetzt die Möglichkeit, die Datei zu überprüfen, ob diese läuft??

Denn momentan wird nur der Wert, das die Datei im Taskmanager aufgeführt ist, überprüft. Da sieht man ja keinerlei Veränderung. Wenn sich die Datei nun aufgehangen hat, wird es nicht erkannt.

Ich schaue mir gerade mit Get-Process an, wie man überprüfen kann, das die Datei am laufen ist, nun suche ich nen Wert der sich ändert, damit ich sehe das ich nen Wert finde der sich verändert...

mfg
Sascha
Member: over23
over23 Apr 22, 2009 at 11:50:14 (UTC)
Goto Top
Ich verstehe glaube ich nicht, was du willst.

 If ($prozess.Responding -match "False") {   
    Stop-Process -name "xy"   
    C:\Pfad\xy.exe 
    "$date | $neu_gestartet" >>C:\Irgendwo\log.txt   
  } 

prüft, ob der Prozess reagiert, wenn nicht wird er beendet, neu gestartet und ein Eintrag in den Log gemacht.

Was meinst du mit:
Zitat von @xm-bit:

Denn momentan wird nur der Wert, das die Datei im Taskmanager
aufgeführt ist, überprüft. Da sieht man ja keinerlei
Veränderung. Wenn sich die Datei nun aufgehangen hat, wird es
nicht erkannt.

??
Member: xm-bit
xm-bit Apr 22, 2009 at 12:04:29 (UTC)
Goto Top
Hi over23,

wie wird denn überprüft ob diese Datei reagiert???
Ich habe das gerade noch einmal getestet.

Ich habe eine Datei die Fehlerhaft ist, es kommt ein Fenster "xy.exe hat ein Problem festgestellt und muss beendet werden".
Solange dieses Fenster da ist, wird die Datei nicht neu gestartet.

Gibt es eine andere Art die Datei "abzuschießen"??

Über den Taskmanager kann ich es beenden. Aber mit dem Script schaffe ich es nicht.

Ich hofe ich habe mich verständlich ausgedrückt...

mfg
Sascha
Member: Mikefield
Mikefield Apr 22, 2009 at 20:55:32 (UTC)
Goto Top
Bekommst Du einen Eintrag im Eventlog?

mf
Member: xm-bit
xm-bit Apr 23, 2009 at 10:52:48 (UTC)
Goto Top
Hi Mikefield,

ja ich bekopmme einen Eintrag im Event-Log..

mfg

Sascha