enssenje
Goto Top

Zeitstempel via Batchdatei überwachen, aber wie?

Hallo Zusammen,

Vorgeschichte:

Ich überwache zur Zeit einige Dateien, die von verschiedenen UNIX-Servern auf einen Fileserver kopiert werden. Dies geschieht in einem Intervall von 5 min. durch einen Cronjob auf dem UNIX-System über SSH. In der letzten Zeit kam es vermehrt zu unstimmigkeiten, da einige Dateien nicht auf den Fileserver transferiert wurden, da der SSH Dienst auf dem Unix-Rechner schlapp gemacht hat bzw. der OpenSSH Service auf dem Windows-System abgestürtzt ist.

Ich möchte nun in gewissen Abständen, eine (oder mehrere) Batch Datei(en) zur Überwachung laufen lassen um den Zeitstempel der Datei(en) mit der aktuellen Uhrzeit zu vergleichen. Ist die Divagenz zu gross soll die Batch mit einem bestimmten Exit-Code beendet werden, so dass ich mit einer Überwachungssoftware eine Meldung ausgeben kann.

Könnte mir in dieser Angelegenheit jemand weiterhelfen?

Content-Key: 61619

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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: bastla
bastla 18.06.2007 um 11:18:47 Uhr
Goto Top
Hallo enssenje und willkommen im Forum!

Falls ich Dich richtig verstanden habe, könnte folgende Lösung per VB-Script funktionieren:
Const DiffDefault = 5
If WScript.Arguments.Count < 1 Then WScript.Quit(2)
File = WScript.Arguments(0)
Set fso = CreateObject("Scripting.FileSystemObject")  
If Not fso.FileExists(File) Then WScript.Quit(2)
FileDateTime = fso.GetFile(File).DateLastModified
If WScript.Arguments.Count < 2 Then 
    Diff = DiffDefault
Else
    If IsNumeric(WScript.Arguments(1)) Then
    	Diff = CInt(WScript.Arguments(1))
    Else	
        Diff = DiffDefault
    End If
End If
If DateDiff("n", FileDateTime, Now) > Diff Then  
    WScript.Quit(1)
End If
Falls das Script etwa unter "C:\Scripts\Aktuell.vbs" gespeichert wäre, würde ein Aufruf (zum Testen) aus einer Batchdatei etwa so aussehen:
@echo off
cscript //nologo "C:\Scripts\Aktuell.vbs" "D:\Testdatei.txt" 10  
if errorlevel 2 echo Datei nicht gefunden ... & goto :eof
if errorlevel 1 echo Datei zu alt (mehr als 10 Minuten) & goto :eof
echo Datei OK
Übergeben werden muss der Name der zu prüfenden Datei. Zusätzlich kann die Minutenanzahl für das Alter der Datei angegeben werden (ansonsten wird der im Script gesetzte Defaultwert von 5 Minuten verwendet).

Das Script endet
mit Errorlevel 2, wenn kein oder ein ungültiger Dateiname angegeben wurde,
mit Errorlevel 1, wenn das Alter in Minuten über der angegebenen (oder defaultmäßigen) Schwelle liegt bzw
mit Errorlevel 0, wenn das Alter in Minuten <= Schwelle.

Zur Altersbestimmung wird das Änderungsdatum ("DateLastModified") herangezogen - alternativ könnte "DateCreated" (für Erstellungsdatum) verwendet werden.

Grüße
bastla

[Edit] Korrigierte Version. [/Edit]
Mitglied: enssenje
enssenje 18.06.2007 um 12:27:27 Uhr
Goto Top
Na da kann ich nur Applaudieren und ein "Dankeschön" vom Stapel lassen.

Habe noch ein paar kleinere modifikationen an dem Batchscript vorgenommen...aber alles Super.

Könnte ich noch erfahren, was in der korrigierten Version verändert worden ist?


Mit freundlichen Grüßen
Mitglied: bastla
bastla 18.06.2007 um 12:33:57 Uhr
Goto Top
Hallo enssenje!

Beim Übernehmen des zweiten Arguments (Zeitangabe) hatte ich die Prüfung auf "numerisch" noch nicht drinnen.

Die Batchdatei war ohnehin rein zu Demo-/Testzwecken gedacht ...

Grüße
bastla