PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Email verschicken bei Log-Event



jacusy
06-08-2007, 15:34
Hallo!

Ich möchte folgendes machen: Sobald eine Email an einen bestimmten Empfänger aus unserem Mail-Gateway versendet wurde, soll eine Email an eine Person verschickt werden.

Mein Plan ist soweit:
Ich durchsuche mit tail die Logdatei /var/log/mail nach der Email-Adresse und erhalte bei einem Versand eine Zeile mit \n am Ende. Wie kann ich daraus eine Email erzeugen? Also ich würde es wohl an ein perl-Script pipen oder direkt an nail, aber da weiß ich nicht genau wie man weiter vorgehen muss....


Kapella:/var/log # tail -f -n 1000 mail | grep -i "to=<jacusy@gmx.net>, relay=192.168.30.24"
Aug 6 16:12:00 Kapella postfix/smtp[602]: 3251497704: to=<jacusy@gmx.net>, relay=192.168.30.24[192.168.30.24], delay=0, status=sent (250 Ok: queued as B46629170530240A)
Aug 6 16:15:19 Kapella postfix/smtp[637]: 8D94597704: to=<jacusy@gmx.net>, relay=192.168.30.24[192.168.30.24], delay=0, status=sent (250 Ok: queued as 7E0D0A24053398E0)

jan61
06-08-2007, 15:50
...
Ich möchte folgendes machen: Sobald eine Email an einen bestimmten Empfänger aus unserem Mail-Gateway versendet wurde, soll eine Email an eine Person verschickt werden....


Z. B. so:

lines="`tail -n 1000 mail | grep -i 'to=<jacusy@gmx.net>, relay=192.168.30.24'`"
if test -n "$lines"; then
nail -s "Subject" adresse@domain.tld <<!
$lines
!
fi
Das Ganze in ein Script, per crontab aufrufen, fertig.

Jan

jacusy
06-08-2007, 17:08
Ich will das ganze aber nicht als cronjob alle 10 Minuten gepollt haben, sondern in Echtzeit. 1 Minute pollen wäre noch im Zeitrahmen, aber da macht der Rechner ja nichts mehr als crons ausführen. Und das ist nicht seine Aufgabe..

Ich will eben die Ausgabe von tail.... | grep.... noch weiter pipen und dann beim Auftauchen einer neuen Zeile per Mail schicken.

jan61
06-08-2007, 18:37
Ich will das ganze aber nicht als cronjob alle 10 Minuten gepollt haben, sondern in Echtzeit. 1 Minute pollen wäre noch im Zeitrahmen...

Dann gibts ein Problem: Du kannst zwar die Ausgabe in einer while-Schleife weiterverarbeiten:
tail -n 1000 mail | grep -i 'to=<jacusy@gmx.net>, relay=192.168.30.24' | while read line; do
...
done aber der read kriegt die Ausgabe erst zu sehen, wenn der I/O-Puffer voll ist. Wenn eine Weile nichts an jacusy geschickt wird, dann kann es sein, dass Du die Ausgaben erst nach Tagen siehst.

Als Alternative solltest Du Dir mal logsurfer anschauen, der bietet IMHO alles, was Du brauchst.

Jan

jacusy
08-08-2007, 10:39
sieht verdammt gut aus, danke! :cool: