Watchdog - Datei auf Änderungen überwachen mit Batch
Hallo,
ich habe ein Programm, welches in kurzen Abständen immer wieder über COM1 Daten abfragt und diese speichert / weiter verarbeitet.
Manchmal kommt es jedoch vor, dass etwas mit dem Zugriff nicht klappt und die Anwendung abstürzt, da keine Kommunikation hergestellt werden kann.
Man sieht das dann nur, wenn keine Meldungen mehr kommen und dann muss der Rechner oder die Anwendung neu gestartet werden.
Nun möchte ich über Batch oder Powershell einfach die Logdatei der Anwendung überwachen und bei längerer Inaktivität den PC neu starten.
Beispiel:
Dateiänderungsdatum länger als 30 Minuten
Schreibe in Logfile "Watchdog aktiv - Neustart wird ausgeführt"
Neustart
Da ich schon ein Batch Programm habe, welches auf vorhandene Meldungen von dem zu überwachenden Programm prüft und diese weiter verarbeitet, wäre es ganz praktisch hier die Abfrage mit einzubauen.
Habt ihr eine Idee, wie man sowas abfragt? Ich komme leider nicht mehr weiter.
Danke und Gruß,
Georg
ich habe ein Programm, welches in kurzen Abständen immer wieder über COM1 Daten abfragt und diese speichert / weiter verarbeitet.
Manchmal kommt es jedoch vor, dass etwas mit dem Zugriff nicht klappt und die Anwendung abstürzt, da keine Kommunikation hergestellt werden kann.
Man sieht das dann nur, wenn keine Meldungen mehr kommen und dann muss der Rechner oder die Anwendung neu gestartet werden.
Nun möchte ich über Batch oder Powershell einfach die Logdatei der Anwendung überwachen und bei längerer Inaktivität den PC neu starten.
Beispiel:
Dateiänderungsdatum länger als 30 Minuten
Schreibe in Logfile "Watchdog aktiv - Neustart wird ausgeführt"
Neustart
Da ich schon ein Batch Programm habe, welches auf vorhandene Meldungen von dem zu überwachenden Programm prüft und diese weiter verarbeitet, wäre es ganz praktisch hier die Abfrage mit einzubauen.
Habt ihr eine Idee, wie man sowas abfragt? Ich komme leider nicht mehr weiter.
Danke und Gruß,
Georg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 377000
Url: https://administrator.de/contentid/377000
Ausgedruckt am: 08.11.2024 um 11:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo Georg,
das lässt sich ziemlich schnell mit einem FileSystemWatcher erledigen. Dazu gibt es hier von mir und anderen schon diverse Threads dazu wenn man ein Logfile überwachen möchte.
Siehe
Einfaches Beispiel mit Powershell das ein Logfile permanent überwacht und nach einer gewissen Zeit ohne Änderung eine Aktion ausführt
Es gibt aber auch die Möglichkeit über Win32_Process und der Responding Methode abzufragen ob ein Prozess noch auf Anfragen reagiert, das wäre aber dann erst einmal zu prüfen wie die Anwendung hier reagiert. Ausschnitt dafür (Powershell)
All das kannst du problemlos auch in deine Batch einbauen. Wie das geht steht auch hier zur Genüge im Forum. Unsere Suchmaschine liefert dir die passenden Ergebnisse dazu.
Grüße Uwe
das lässt sich ziemlich schnell mit einem FileSystemWatcher erledigen. Dazu gibt es hier von mir und anderen schon diverse Threads dazu wenn man ein Logfile überwachen möchte.
Siehe
Einfaches Beispiel mit Powershell das ein Logfile permanent überwacht und nach einer gewissen Zeit ohne Änderung eine Aktion ausführt
# Datei deren Inhalt überwacht werden soll
$file = 'D:\Daten\logfile.txt'
# Max Zeit ohne Änderungen in Sekunden
$global:maxtime = 1800
# ---------
# Zeit der letzten Änderung
$global:lastchange = get-date
# Eventuell existierenden Event subscriber löschen
Get-EventSubscriber FileChanged -EA SilentlyContinue | Unregister-Event -Force
# Filesystemwatcher erstellen
$fsw = New-Object IO.FileSystemWatcher (Split-Path $file -Parent), (Split-Path $file -Leaf) -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
# Filesystemwatcher registieren
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
# Pfad zur Datei
$fullpath = $Event.SourceEventArgs.FullPath
$global:lastchange = $Event.TimeGenerated
} | out-null
cls
write-host "Überwache Datei '$file' ..." -F Green
while($true){
if ((get-date) -gt $global:lastchange.AddSeconds($global:maxtime)){
write-host "Letzte Änderung an der Datei liegt länger als $global:maxtime Sekunden zurück." -F Yellow
# Tu hier was
# z.B. Prozess neu starten oder Rechner neu starten
# Restart-Computer -Force
break
}
sleep 1
}
if (!(Get-Process -Name "AnwendungXYZ").Responding) {
write-host "Prozess reagiert nicht auf Anfragen"
}
Grüße Uwe