Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Batch prüfen ob Programm länger als 5 Min. läuft, wenn ja schliessen

Frage Entwicklung Batch & Shell

Mitglied: B-Real

B-Real (Level 1) - Jetzt verbinden

28.03.2013, aktualisiert 17:45 Uhr, 3831 Aufrufe, 5 Kommentare

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:

01.
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.
Mitglied: Endoro
28.03.2013 um 18:27 Uhr
Hallo B-Real, du könntest die Batch 5 Minuten in einer Schleife laufen lassen und die PIDs dann überprüfen.


bb
Bitte warten ..
Mitglied: rubberman
28.03.2013, aktualisiert um 19:27 Uhr
Hallo Zusammen.

Schleife ist gut, aber die PID benötigt man eigentlich nicht.
01.
@echo off &setlocal 
02.
 
03.
set "process=WinSCP.exe" 
04.
set "max=300" 
05.
set "step=30" 
06.
 
07.
for /l %%i in (1 %step% %max%) do ( 
08.
  >nul timeout /t %step% /nobreak 
09.
  tasklist /fi "imagename eq %process%" /nh | findstr /ibc:"%process%" >nul || exit 
10.
11.
 
12.
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
Bitte warten ..
Mitglied: DerWoWusste
28.03.2013 um 19:31 Uhr
...und noch ein Ansatz per Powershell:
Hi.

new-timespan -start (get-Process winscp).starttime |ft totalminutes
Bitte warten ..
Mitglied: B-Real
29.03.2013 um 10:47 Uhr
Danke rubberman, dein Vorschlag genügt vollkommen für meine Zwecke. Ist somit als gelöst markiert.
Bitte warten ..
Mitglied: JawCruncher
24.05.2013 um 07:59 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...