neo2k
Goto Top

Abrage bestimmter Begriffe einer Logdatei und Emailversand

Hallo Zusammen,

da Skripting nicht so mein Fall ist, hoffe ich nun, dass jemand von euch eine Idee hat, wie ich mein Vorhaben am besten umsetzen kann.

Snapshot.exe erzeugt nach jedem Backup eine Log-Datei, in der Sicherungsdatails, sowie der Status der Sicherung angegeben wird.
Das Backupprogramm schliesst die Logdatei.txt bei erfolgreicher Sicherung mit einem "success" und beim Fehlschlagen mit "failed" ab.

Die Logdatei in verkürzter Version sieht so aus:

18:42:46 C: -> G:\backup\snapshot\C091227full.sna
18:42:47 Start backup of C: -> g:\backup\snapshot\C091227full.sna
18:42:48 free space info: total 99998MB, 40384MB free, 51129 must be saved
18:42:52 C: -> g:\backup\snapshot\C091227full.sna
19:18:30 Success

Diese Logdatei würde ich nun gerne überwachen. Meine Idee ist nun, dass ich nach der Sicherung eine Batchdatei via Scheduler aufrufen lasse, in der die Logdatei ausgelesen wird und mir anschließend bei "success" oder "failed" eine Email schickt.

Frage 1: wie baue ich die Batchdatei auf?
Frage 2: womit versende ich die Email? Ich möchte unabhängig von installierten Mailprogrammen, etc. verschicken können. Sowas wie Sendmail, oder?
Frage 3: Gibt es vielleicht einen besseren Lösungsweg? Ich habe allerdings nur dieses Snapshot zum Sichern, welches die logdatei.log erstellt.

Für Anregungen schon mal vielen Dank im Vorraus.

Content-ID: 136319

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

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

bastla
bastla 18.02.2010 um 19:44:08 Uhr
Goto Top
Hallo Neo2k!

Die Batchdatei könnte etwa so aussehen:
@echo off & setlocal
set "Erg="  
for /f "tokens=2" %%i in (D:\Logdatei.txt) do set "Erg=%%i"  
if /i "%Erg%"=="Success" echo blat ... Erfolgsmeldung & goto :eof  
if /i "%Erg%"=="Failed" echo blat ... Fehlermeldung & goto :eof  
echo blat ... Undefiniertes Ergebnis
Anstelle der jeweiligen "echo blat ..."-Ausgaben wäre der Aufruf des Mailprogrammes (zB "blat" - Beispiele findest Du hier im Forum) einzusetzen ...

Grüße
bastla
Neo2k
Neo2k 19.02.2010 um 10:37:42 Uhr
Goto Top
Hallo Bastla,

vielen Dank für deinen schnellen Lösungsvorschlag, Ich habe mir Blat mal angeschaut. Das ist ja ein ziemlich geniales Tool. face-smile

Ich habe mir auch schon eine CMD gebastelt, mit der die Logdatei von Snapshot an mich geschickt wird.
Jetzt peile ich nicht ganz, wie ich deine Zeilen mit denen von Blat kombiniere.

Hier mal der Aufruf von Blat:

@echo off & setlocal 
set "Erg="   
for /f "tokens=2" %%i in (x:\logs\sys_mo_full.log) do set "Erg=%%i"  
if /i "%Erg%"=="Failed" Blat -install SERVER.domäne.local monitoring@emaildomain.de  
Blat "C:\blat\body.txt" -to empfänger@emaildomain.de -server mail.emaildomain.de -u monitoring@emaildomain.de -pw passwort - -debug -timestamp -log blatSMTPlog.txt -subject "Snaphot Vollsicherung - System (C) - Montags fehlgeschlagen " & goto :eof   

Hm, das sieht aber nicht sehr logisch aus,oder? Schade, dass ich mich da nie mit beschäftigt habe. Kann man ja schon richtig nette Sachen mit machen.

Wo habe ich den Fehler gemacht?


EDIT: Jetzt habe ich festgestellt, dass es auch passieren kann, dass die Logdatei nicht vollständig abgeschlossen wird. So kann es passieren, dass bei Sicherungsende, oder Sicherungsabbruch weder "failed" noch "success" steht. (Durch Absturz des Programms oder des Hosts).
In diesem Fall wäre es vielleicht sinniger, wenn man in dem Skript überprüft, ob "success" vorhanden ist.Und falls nicht, dass dann erst die Email verschickt wird.

Gruß,
neo2k
bastla
bastla 19.02.2010 um 13:11:13 Uhr
Goto Top
Hallo Neo2k!

Wenn Du mehrere Zeilen (in Deinem Ansatz die Zeilen 4 und 5) abhängig von einem "if" ausführen willst, kannst Du das im einfachsten Fall so lösen:
if /i "%Erg%"=="Failed" (  
    Blat -install SERVER.domäne.local monitoring@emaildomain.de
    Blat "C:\blat\body.txt" -to empfänger@emaildomain.de -server mail.emaildomain.de -u monitoring@emaildomain.de -pw passwort - -debug -timestamp -log blatSMTPlog.txt -subject "Snaphot Vollsicherung - System (C) - Montags fehlgeschlagen "  
    goto :eof
)
Auf die gleiche Weise kannst Du auch auf "success" reagieren - durch das "goto :eof" wird der Batch beendet, sodass die Zeile 6 meines Beispiels oben nur erreicht werden kann, wenn weder "success" noch "failed" als 2. Wort in der letzten Zeile gefunden wurden ...

In diesem Fall wäre es vielleicht sinniger, wenn man in dem Skript überprüft, ob "success" vorhanden ist.Und falls nicht, dass dann erst die Email verschickt wird.
Wenn Du im Erfolgsfall keine Mail senden willst, könntest Du einfach mit
if /i "%Erg%"=="Success" goto :eof
den Batch beenden.

Grüße
bastla