Per Batch prüfen ob Programm länger als 5 Min. läuft, wenn ja schliessen
Hallo Community,
ich möchte per Batch auf einem Windows 7 x86 PC prüfen, ob das Programm WinSCP.exe länger als 5 Minuten läuft. Wenn ja soll der Prozess beendet werden, zB mit taskkill. Ein Neustarten von WinSCP.exe ist nicht notwendig, das geschieht ohnehin mit einem anderen Task.
Hintergrund: Alle 15 Minuten läuft ein Batch Programm im Hintergrund (in der Aufgabenplanung als Task definiert), das wiederum einige weitere Batch Programme der Reihe nach aufruft. In einem dieser Batch Programme wird das Programm WinSCP.exe mit definierten Parametern gestartet. WinSCP holt dann von einem FTP Server Daten ab, falls vorhanden.
Letztens ist es aber vorgekommen dass WinSCP mit der Logfile-Meldung "Fehler beim Anzeigen des Verzeichnisses" hängen geblieben ist und dadurch die Batch Verarbeitung ewig stehen geblieben ist, was mir natürlich erst später aufgefallen ist. WinSCP sollte normalerweise nicht länger als 20-30 Sekunden brauchen um die Daten vom FTP Server abzuholen.
Mit der Suche bin ich auf ein Posting von User bastla gestossen, mit diesem Batch-Befehl kann die Process ID (PID) von WinSCP ausgelesen werden:
Somit habe ich die PID, aber wie kann ich per Batch prüfen ob die selbe PID in 5 Minuten immer noch läuft und falls ja den Prozess automatisch beenden? WinSCP wird nur einmal gestartet, es gibt also keine mehrfachen Instanzen mit verschiedenen PIDs.
Danke für eure Ratschläge.
ich möchte per Batch auf einem Windows 7 x86 PC prüfen, ob das Programm WinSCP.exe länger als 5 Minuten läuft. Wenn ja soll der Prozess beendet werden, zB mit taskkill. Ein Neustarten von WinSCP.exe ist nicht notwendig, das geschieht ohnehin mit einem anderen Task.
Hintergrund: Alle 15 Minuten läuft ein Batch Programm im Hintergrund (in der Aufgabenplanung als Task definiert), das wiederum einige weitere Batch Programme der Reihe nach aufruft. In einem dieser Batch Programme wird das Programm WinSCP.exe mit definierten Parametern gestartet. WinSCP holt dann von einem FTP Server Daten ab, falls vorhanden.
Letztens ist es aber vorgekommen dass WinSCP mit der Logfile-Meldung "Fehler beim Anzeigen des Verzeichnisses" hängen geblieben ist und dadurch die Batch Verarbeitung ewig stehen geblieben ist, was mir natürlich erst später aufgefallen ist. WinSCP sollte normalerweise nicht länger als 20-30 Sekunden brauchen um die Daten vom FTP Server abzuholen.
Mit der Suche bin ich auf ein Posting von User bastla gestossen, mit diesem Batch-Befehl kann die Process ID (PID) von WinSCP ausgelesen werden:
for /f "tokens=2" %%i in ('tasklist^|findstr /b "WinSCP.exe"') do set "PID=%%i"
Somit habe ich die PID, aber wie kann ich per Batch prüfen ob die selbe PID in 5 Minuten immer noch läuft und falls ja den Prozess automatisch beenden? WinSCP wird nur einmal gestartet, es gibt also keine mehrfachen Instanzen mit verschiedenen PIDs.
Danke für eure Ratschläge.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 204123
Url: https://administrator.de/forum/per-batch-pruefen-ob-programm-laenger-als-5-min-laeuft-wenn-ja-schliessen-204123.html
Ausgedruckt am: 23.12.2024 um 13:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo Zusammen.
Schleife ist gut, aber die PID benötigt man eigentlich nicht.
Ausnahmsweise habe ich mal ein EXIT im Code, da sich die FOR /L Schleife sonst nicht abbrechen lässt. Ansonsten wird eben alle 30s getestet ob der Prozess noch läuft.
Grüße
rubberman
Schleife ist gut, aber die PID benötigt man eigentlich nicht.
@echo off &setlocal
set "process=WinSCP.exe"
set "max=300"
set "step=30"
for /l %%i in (1 %step% %max%) do (
>nul timeout /t %step% /nobreak
tasklist /fi "imagename eq %process%" /nh | findstr /ibc:"%process%" >nul || exit
)
taskkill /im %process% /f
Ausnahmsweise habe ich mal ein EXIT im Code, da sich die FOR /L Schleife sonst nicht abbrechen lässt. Ansonsten wird eben alle 30s getestet ob der Prozess noch läuft.
Grüße
rubberman
Ich mache so etwas sehr viel, da ich mit umfangreichen Batch-Dateien unter anderem meine SW-Verteilung mache. Also, auch wenn gelöst hier noch ein Ansatz:
Batch schreibt ganz zu Beginn eine Datei (ich nenne sie immer Flag-Datei) an eine definierte Stelle. Der Name der Datei ist der Name der Batch und die Prozess-ID. Eine zweite Batch-Datei wird zyklisch aufgerufen und prüft, ob die Flagdatei älter ist XX Minuten ist. Falls ja, wird davon ausgegangen, dass der Prozess hängt, dieser wird terminiert und eine Mail (per blat) an den Admin gesendet.
Bei mir laufen die Jobs der 2. Batchdatei sogar auf einem anderen Server. Vorteil ist, dass nicht nur die Laufzeit selber geprüft werden kann, sondern eben auch durch Tipp- oder Denkfehler verursachte Abbrüche der Batch erfasst werden.
Jens
Batch schreibt ganz zu Beginn eine Datei (ich nenne sie immer Flag-Datei) an eine definierte Stelle. Der Name der Datei ist der Name der Batch und die Prozess-ID. Eine zweite Batch-Datei wird zyklisch aufgerufen und prüft, ob die Flagdatei älter ist XX Minuten ist. Falls ja, wird davon ausgegangen, dass der Prozess hängt, dieser wird terminiert und eine Mail (per blat) an den Admin gesendet.
Bei mir laufen die Jobs der 2. Batchdatei sogar auf einem anderen Server. Vorteil ist, dass nicht nur die Laufzeit selber geprüft werden kann, sondern eben auch durch Tipp- oder Denkfehler verursachte Abbrüche der Batch erfasst werden.
Jens