florian86
Goto Top

Script zum prüfen von Prozessen

Hallo,

folgendes Problem:

ich möchte über ein Script was als geplanter Task läuft prüfen ob ein Programm auf einen Error gelaufen ist oder nicht und dieses evtl. neustarten.


folgenden Ablauf soll das Script haben:

1. Prüfung ob Programm läuft -> Script beenden

2. Prüfung ob Programm auf einen Error gelaufen ist -> wenn ja dann ::Taskkill und neustart

taskkill /im putty.exe /f
cd "C:\Users\decker-f.HENGLEIN-KH\Desktop"
start putty.exe -load "waage-208"

Leider weis ich nicht wie ich die Prüfungen einbaue bzw. kenn ich die Befehle nicht.

MfG

Florian86

Content-Key: 249831

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

Printed on: April 16, 2024 at 19:04 o'clock

Member: Sheogorath
Solution Sheogorath Sep 22, 2014, updated at Sep 23, 2014 at 07:51:32 (UTC)
Goto Top
Moin,


Das ist nicht schwer:
tasklist | find "httpd"  

Edit: Wichtig ist nur, dass du den Prozessnamen (in desem Fall httpd) in "" schreibst. Funktioniert ansonsten genaus wie ein einfaches grep unter Linux

Der Rest ist die Abfrage des Errorlevels.

Gruß
Chris
Member: Florian86
Florian86 Sep 23, 2014 at 05:42:34 (UTC)
Goto Top
Hallo Chris,

ich habe nun folgenden stehen:

tasklist |find "putty.exe"
if errorlevel 0 goto end
if errorlevel 1 goto taskkill

:taskkill
taskkill /im putty.exe /f
cd "C:\Users\decker-f.HENGLEIN-KH\Desktop"
start putty.exe -load "waage-208"
goto end
:end

Problem ist das bei Errorlevel 0 >= gemeint ist.
Wie kann ich vermitteln das er bei keinem Fehler einfach zu END gehen soll???

MfG

Florian86
Member: Sheogorath
Solution Sheogorath Sep 23, 2014 updated at 07:48:05 (UTC)
Goto Top
Moin,

also ich würde es so lösen:
tasklist |find "putty.exe"  
if %errorlevel% eq 0 goto end

:taskkill
cd "C:\Users\decker-f.HENGLEIN-KH\Desktop"  
start putty.exe -load "waage-208"  
goto end

:end

Errorlevel 0 tritt ja auf, dass er putty findet. (weswegen du dir taskkill sparen kannst, weil kein putty mehr läuft). Was du machen willst, sieht mir aber eher danach aus, dass du die Fehlermeldung des Verbindungsabbruchs finden willst. Das ist natürlich etwas anderes, aber auch nicht unmöglich. Da würde die Abfrage wie folgt aussehen:

set remoteip 192.168.1.1
set remotecomputername waage-208
netstat -a |find "%remoteip%:22"  
if errorlevel 0 goto end
netstat -a |find "%remotecomputername%:22"  
if errorlevel 0 goto end


:taskkill
taskkill /im putty.exe /f
cd "C:\Users\decker-f.HENGLEIN-KH\Desktop"  
start putty.exe -load "waage-208"  
goto end

:end

Hier musst du nur beachten, wie gut die rDNS eures unternehmens ist, also wie gut sich IPs zu DNS namen wieder auflösen lassen. Wenn diese richtig konfiguriert ist wird nämlich der DNS Namen statt der IP Adresse angezeigt. (Um zu verstehen wie das alles funktioniert, musst du natürlich wissen, was Putty macht, aber das kannst du dir natürlich anlesen)

Gruß
Chris
Member: Florian86
Florian86 Sep 23, 2014 at 07:51:14 (UTC)
Goto Top
Hallo Chris,

Danke für die Unterstützung.

Ich habe es nun anders gemacht:

Man kann im Putty auch sagen, dass er bei einem Fehler putty ohne Meldung schliesen soll.
So lasse ich dann nur prüfen ob Putty noch läuft. Wenn es läuft soll er abbrechen und wenn nicht dann starten.

Tasklist |find "putty.exe"
if "%errorlevel%" == "0" goto end
if errorlevel 1 cd "C:\Users\decker-f.HENGLEIN-KH\Desktop\waage-208\"
start putty.exe -load "test"

:end

MfG

Florian
Member: Sheogorath
Sheogorath Sep 23, 2014 at 08:32:49 (UTC)
Goto Top
Moin,

das geht natürlich auch, ja.

allerdings kannst du es dann noch richtig elegant lösen:
Tasklist |find "putty.exe"  
if %errorlevel% eq 1 (
cd "C:\Users\decker-f.HENGLEIN-KH\Desktop\waage-208\"  
start putty.exe -load "test"  
)

Somit sollte es dann wirklich komplett ohne goto gehen (ist eben eine Stilfrage) ohne goto kannst du es übrigens auch um ein vielfaches besser in andere Script und Programmiersprachen übertragen.

Gruß
Chris