Script um Log zu durchsuchen + automatisch Mail zu versenden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
winbla
Beiträge: 4
Registriert: 13.03.2011 13:10:08

Script um Log zu durchsuchen + automatisch Mail zu versenden

Beitrag von winbla » 13.03.2011 13:17:35

Hallo,

ich brauche ein Script welches in bestimmten Abständen eine Log-Datei nach einem Schlüsselwort durchsucht und dann, falls dieses Wort gefunden wird, automatisch eine Mail versendet.

Bisher sieht es so aus:

Code: Alles auswählen

$ERROR=""

ERROR=$(tail /var/log/bla.log | grep "Serial")

if [ -z "$ERROR" ]; then
sendEmail -f SENDER -t EMPFÄNGER -u BETREFF -m MAILBODY -s SMTPSERVER -xu SMTPUSER -xp SMTPPASSW
fi

$ERROR=""
Wenn ich das Script ausführe, erscheinen folgende Zeilen:

Code: Alles auswählen

./test.sh: line 1: =: command not found
Mar 13 13:14:43 debian sendEmail[11748]: Email was sent successfully!
./test.sh: line 10: =: command not found
Der Mailversand erfolgt jedes Mal, auch wenn das Schlüsselwort "Serial" nicht gefunden wurde.
Das Problem scheint die Variablen-Zuweisung zu sein.

Wäre super, wenn mi jemand helfen könnte.

Dann brauche ich das Script nur noch in einen Cron-Job zu verpacken und die verursachte Last zu betrachten.

mfg

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: Script um Log zu durchsuchen + automatisch Mail zu verse

Beitrag von Six » 13.03.2011 14:29:17

Hallo und willkommen im df.de!
Der Mailversand erfolgt jedes Mal, auch wenn das Schlüsselwort "Serial" nicht gefunden wurde.
Du prüfst, ob ERROR die Länge Null hat.
Das Problem scheint die Variablen-Zuweisung zu sein.
Die ist ja auch falsch ;)

Zuweisung:

Code: Alles auswählen

ERROR=""
Referenz

Code: Alles auswählen

$ERROR
Be seeing you!

winbla
Beiträge: 4
Registriert: 13.03.2011 13:10:08

Re: Script um Log zu durchsuchen + automatisch Mail zu verse

Beitrag von winbla » 13.03.2011 14:47:44

Six hat geschrieben:Hallo und willkommen im df.de!
Danke schön !!

Six hat geschrieben: Du prüfst, ob ERROR die Länge Null hat.
Ja das will ich ja auch.
Ich setze die Variable ERROR auf Null.

Code: Alles auswählen

ERROR=""
Dann suhe ich per Grep nach dem Schlüsselwort und fülle die Variable, falls es gefunden wurde.

Dann prüfe ich die Variable auf Inhalt und falls Inhalt vorhanden ist, wird die Mail versandt.
Falls kein Inhalt vorhanden ist, sprich die Variable hat die Länge Null, soll nichts getan werden.

Danach setze ich die Variable ERROR wiederum auf Null, damit sie für den nächsten Script-Durchlauf wieder frei ist.

Wo ist mein Denkfehler ?

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: Script um Log zu durchsuchen + automatisch Mail zu verse

Beitrag von Six » 13.03.2011 15:03:48

winbla hat geschrieben: Dann prüfe ich die Variable auf Inhalt und falls Inhalt vorhanden ist, wird die Mail versandt.
Falls kein Inhalt vorhanden ist, sprich die Variable hat die Länge Null, soll nichts getan werden.
Nein, du prüfst, ob die Variable die Länge Null hat. Wenn das der Fall ist, dann wird eine Mail verschickt. Wenn du prüfen willst, ob die Variable NICHT Null ist, dann benutze z. B. -n.
Be seeing you!


pferdefreund
Beiträge: 3799
Registriert: 26.02.2009 14:35:56

Re: Script um Log zu durchsuchen + automatisch Mail zu verse

Beitrag von pferdefreund » 14.03.2011 08:57:34

Schau mal hier
http://debianforum.de/forum/pastebin.ph ... ew&s=35386

ist zwar ein C-Programm aber tuts bei mir problemlos.
Mit Scripts stehe ich ein bisserl auf Kriegsfuss - verwende dann lieber
gleich C. Das Teil wartet am Dateiende des Logs auf neue meldungen, damit
nix doppelt und dreifach verschickt wird.

in der Config dann
fehlermeldung=was ausgeführt werden soll.

Eventuell das #include <libpferd.h> rausnehmen - wird wohl nicht
gebraucht
erstellen mit gcc -o logwatch logwatch.c

winbla
Beiträge: 4
Registriert: 13.03.2011 13:10:08

Re: Script um Log zu durchsuchen + automatisch Mail zu verse

Beitrag von winbla » 15.03.2011 20:49:45

Vielen Dank für die interessanten Links !

log2mail scheint genau das zu sein, was ich suche.

Allerdings bekomme ich es hier nicht hin, dass der dafür benötigte exim4 die Mails über mein web.de-Konto versendet.

Da muß ich mich wohl oder übel in exim4 einlesen. Ist zwar ne ganz andere Baustelle wie mein eigentliches Problem, aber sicherlich auch interessant.

/edit:

obwohl ich meinen Usernamen eingetragen habe, versucht mein exim die Mail immer vom Absender "root@web.de" zu versenden.
Dies wird natürlich vom web.de-Smarthost unterbunden und die Mail kommt zurück.

Wie kann ich den korrekten Absender setzen ?

/edit2:

in /etc/email-adresses kann man einen alias einrichten:

root:username@web.de

Funktioniert jetzt einwandfrei ! Danke nochmal an alle die geholfen haben.

winbla
Beiträge: 4
Registriert: 13.03.2011 13:10:08

Re: Script um Log zu durchsuchen + automatisch Mail zu verse

Beitrag von winbla » 16.03.2011 22:02:09

Bin ja jetzt schon zufrieden, aber es gäbe momentan noch eine weitere Sache, welche ganz toll wäre:

Wenn ein vorgegebenes Wort im Log auftaucht, soll keine Mail versendet werden, sondern die Maschine soll einen reboot durchführen.

das wäre super !

Hat jemand eine Idee ?

mfg

Benutzeravatar
FANA
Beiträge: 482
Registriert: 30.03.2005 17:50:55

Re: Script um Log zu durchsuchen + automatisch Mail zu verse

Beitrag von FANA » 16.03.2011 22:32:43

Probier es mal mit swatch

http://packages.debian.org/squeeze/swatch
http://www.linuxjournal.com/node/4776/print
http://www.spitzner.net/swatch.html
http://www.linuxsecurity.com/content/view/117281/50/

Beispiel:

Code: Alles auswählen

apt-get install swatch
apt-get install bsdutils   ( für /usr/bin/logger zum manuellen Loggen nach Syslog )
/etc/swatchrc

Code: Alles auswählen

watchfor /please reboot/
exec logger "Going to reboot"

Code: Alles auswählen

swatch --daemon -c /etc/swatchrc --tail-file=/var/log/syslog

Code: Alles auswählen

logger "please reboot" ; tail /var/log/syslog
Hinter das "exec" schreibst du dann stattdessen /sbin/reboot

Antworten