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-ID: 114340

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

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

over23
over23 21.04.2009 um 13:35:22 Uhr
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.
xm-bit
xm-bit 21.04.2009 um 14:57:05 Uhr
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
over23
over23 21.04.2009 um 20:11:12 Uhr
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.
xm-bit
xm-bit 21.04.2009 um 20:57:11 Uhr
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
xm-bit
xm-bit 22.04.2009 um 10:11:21 Uhr
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
over23
over23 22.04.2009 um 10:39:49 Uhr
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.
xm-bit
xm-bit 22.04.2009 um 10:51:28 Uhr
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
over23
over23 22.04.2009 um 13:12:45 Uhr
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
xm-bit
xm-bit 22.04.2009 um 13:37:45 Uhr
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
over23
over23 22.04.2009 um 13:50:14 Uhr
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.

??
xm-bit
xm-bit 22.04.2009 um 14:04:29 Uhr
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
Mikefield
Mikefield 22.04.2009 um 22:55:32 Uhr
Goto Top
Bekommst Du einen Eintrag im Eventlog?

mf
xm-bit
xm-bit 23.04.2009 um 12:52:48 Uhr
Goto Top
Hi Mikefield,

ja ich bekopmme einen Eintrag im Event-Log..

mfg

Sascha