3 Stimmen

Generieren von E-Mails mit Ausgabenergebnissen für mehrere im Hintergrund ausgeführte Skripte auf KSH

Zunächst ein kurzer Hintergrund: Wir haben 9 JVM-Server, die Protokolldateien ausgeben, die ich ständig parsen, um zu finden, wann ein Fehler auftritt. Die Protokolle rollen alle 5-10 Minuten, aber der Dateiname ändert sich nicht. Früher habe ich SupperPutty verwendet, um 9 Sitzungen zu öffnen und das untenstehende Skript gegen jede Protokolldatei auszuführen, aber das war nur effektiv, wenn ich bei der Arbeit war.

tail -f *filename* | nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind-Wert für HASCHILDREN = 0"

Also wollte ich das obige Skript in ein Hintergrundskript umwandeln, das mir eine E-Mail sendet, wenn ein Fehler auftritt. Zuerst musste ich mich in eine zweite Shell einloggen, um zu verhindern, dass die Skripte angehalten werden, wenn ich aussteige (auch wenn ich sie als NOHUP eingerichtet hatte). Ich habe versucht, das Skript wie unten gezeigt einzurichten, aber es sendet mir keine E-Mail, wenn der Fehler auftritt.

tail -f *filename* | nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind-Wert für HASCHILDREN = 0" | mailx -s "Kinderflag wurde erkannt" *email* &

Jede Hilfe wäre sehr geschätzt.

1voto

nay743 Punkte 86

Sie könnten versuchen, einen Cron-Job in der Crontab-Datei zu planen, um ein Skript alle 5-10 Minuten aufzurufen, das nach Änderungen in Ihren Protokollen sucht und Ihnen eine E-Mail sendet, wenn ein Fehler gefunden wird.

Aus der Crontab-Dokumentation:

Der Crontab-Befehl ruft eine Bearbeitungssitzung auf, die es Ihnen ermöglicht, eine Crontab-Datei zu erstellen. Sie erstellen Einträge für jeden Cron-Job in dieser Datei. Jeder Eintrag muss in einer Form sein, die der Cron-Dämon akzeptiert. Weitere Informationen zur Erstellung von Einträgen finden Sie im Format für den Crontab-Dateieintrag.

Beispiel:

Um den Kalenderbefehl um 6:30 Uhr jeden Montag, Mittwoch und Freitag auszuführen, geben Sie ein:

    30 6 * * 1,3,5 /usr/bin/calendar

Alternativ können Sie eine Crontab-Datei erstellen, indem Sie den Dateiparameter angeben. Wenn die Datei existiert, muss sie im Format vorliegen, das der Cron-Dämon erwartet.

0voto

demonic240 Punkte 55

Also habe ich einen Cron-Job eingerichtet und ihm gesagt, dass er meine Unternehmens-E-Mail-Adresse mailen soll, aber er legt die Ausgaben in meinen Unix-Mailbox ab. Habe ich etwas übersehen?

MAILTO="email"

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind-Wert für HASCHILDREN = 0" /maximo/logs/file1 >/dev/null 2>&1

0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=2 a=4 s="Bind-Wert für HASCHILDREN = 0" /maximo/logs/file2 >/dev/null 2>&1

0voto

nay743 Punkte 86

Wenn Sie '&> /dev/null' hinzufügen, um Ihre Cron-Jobs umzuleiten, erhalten Sie keine Ausgabe und Cron sendet nichts per E-Mail. Ich denke, es ist einfacher für Sie, Ihre Cron-Jobs einfach wie am Anfang umzuleiten:

    | mailx -s "Kinderflagge wurde erkannt" *E-Mail-Adresse*

Die korrekte Syntax lautet MAILTO="Benutzername". Ich schlage vor, dass Sie, wenn Sie das obige verwenden, dann auch dies ändern in MAILTO="", um E-Mail-Berichte von Cron zu deaktivieren, da Sie stattdessen eine E-Mail über mailx senden werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X