it-swarm.com.de

Wie bekomme ich E-Mails von (fehlgeschlagenen) Cron-Jobs in Ubuntu?

Ich erstelle Cron-Jobs in Ubuntu, indem ich die ausführbare Datei in eine der /etc/cron.{daily,hourly,monthly,weekly}. Es gibt viele Verzeichnisse, die mit cron beginnen:

[email protected]:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root  724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly

Ich möchte E-Mails von meinen Skripten erhalten, wenn:

  1. Ein Skript schlägt fehl und gibt einen Exit-Code ungleich Null aus.
  2. Das Skript hat mir etwas zu sagen

Ich habe SSMTP installiert und arbeite, ich sende meine Mail von meinem Google-Konto. Die Tatsache, dass SSMTP nur E-Mails mit einem Konto senden kann, ist für mich kein Problem. Es ist nur ein Heimserver und die Benutzer, die ich habe, können keine Cron-Jobs hinzufügen.

Ich würde gerne wissen, wie das Mailing von Skripten normalerweise unter Linux/Unix im Allgemeinen und unter Ubuntu im Besonderen funktioniert. Ich würde auch gerne wissen, wie ich in den beiden oben genannten Situationen E-Mails erhalten kann.

46
Deleted

Standardmäßig sendet cron eine E-Mail an den Eigentümer des Kontos, unter dem die crontab ausgeführt wird.

Die systemweite Crontab befindet sich in/etc/crontab und wird unter dem Benutzer "root" ausgeführt.

Da root weit verbreitet ist, würde ich empfehlen, Ihrer Datei/etc/aliases trotzdem einen Root-Alias ​​hinzuzufügen. ('newaliases' nach ausführen)

Der normale Weg, dies zu strukturieren, besteht darin, dass root auf einen anderen Benutzer im System ausgerichtet ist, z. Für mich würde ich den Alias ​​"root" auf "phil" (mein Benutzerkonto) und den Alias ​​"phil" auf meine externe E-Mail-Adresse setzen.

Wenn Sie einen bestimmten Benutzer haben, den Sie bei der Ausgabe per E-Mail erhalten möchten, können Sie/etc/aliases erneut verwenden (vorausgesetzt, Sie haben Superuser-Zugriff), um den Benutzer zu einer anderen E-Mail-Adresse umzuleiten, oder Sie können Folgendes unter verwenden oben auf Ihrem crontab:

MAILTO="[email protected]"

Wenn E-Mails an einen lokalen Benutzer gesendet werden sollen, können Sie stattdessen nur den Benutzernamen eingeben:

MAILTO=someuser

Wenn Sie weitere Informationen benötigen, lesen Sie crontab (5), indem Sie Folgendes ausführen:

man 5 crontab
62
Philip Reynolds

Um E-Mails von vixie cron zu erhalten, benötigen Sie etwas, das den Befehl sendmail repliziert. Wenn Sie also Postfix oder SSMTP installieren, wird dieser Teil erledigt. Wenn Sie Postfix verwenden, kann die Aliase-Datei verwendet werden, um Systembenutzer echten E-Mail-Adressen zuzuordnen.

Wenn Sie MAILTO = "[email protected]" oben auf einer Crontab hinzufügen, werden alle Ausgaben des Cron-Jobs per E-Mail gesendet. Dies ist unabhängig vom Fehlercode.

Für Skripte, die Fehler korrekt in STDERR ausgeben, ist es einfach, eine E-Mail nur dann zu erhalten, wenn sie schief gehen.

MAILTO="[email protected]"
0 5 * * * /bin/some_script > /dev/null

Dadurch wird nur das STDOUT auf null umgeleitet. Wenn STDERR-Nachrichten vorhanden sind, erhalten Sie eine E-Mail.

Ich habe jedoch festgestellt, dass einige Skripte Fehler als STDOUT falsch ausgeben und den Exit-Code auf 1 setzen. Ich habe keine Möglichkeit gefunden, die Ausgabe von diesen abzurufen, aber ignoriere die Ausgabe, wenn der Exit-Code 0 ist. Die einzige Methode Ich kann mir vorstellen, die Ausgabe in eine Datei umzuleiten. Wenn der Exit-Code nicht 0 ist, wird diese Datei für cron ausgegeben. Scheint aber ziemlich schrecklich.

29
Theozaurus

Wenn Sie alle Ausgaben (stdout und stderr) an eine bestimmte Adresse senden möchten, können Sie die Variable MAILTO verwenden. Platzieren Sie beispielsweise Folgendes oben im Skript.

MAILTO="[email protected]"
8
Dan Carley

versuchen Sie, "root: [email protected]" zu/etc/aliases hinzuzufügen

dadurch werden alle Nachrichten für diesen Benutzer an Ihre E-Mail gesendet. Wenn Sie nicht alle Nachrichten möchten, können Sie einen Benutzer speziell dafür erstellen.

Solange das Skript etwas ausgibt, erhalten Sie eine E-Mail.

5
Daniel P

Auf all meinen Produktionsservern, auf denen normalerweise täglich etwa 20 Cronjobs ausgeführt werden, schwöre ich auf das Python-Cronwrap-Paket. Überprüfen Sie es hier: http://pypi.python.org/pypi/cronwrap . Es ist sehr einfach zu konfigurieren und vor allem zuverlässig.

3
Low Kian Seong

Ich denke nicht, dass SSMTP dem entspricht, wofür Sie es benötigen. Sie benötigen etwas, das E-Mails von den Cron-Prozessen "empfangen" und dann an Ihre echte Mailbox senden kann.

Ich benutze Sendmail, aber das liegt daran, dass ich eine alte Sun-Hand bin. Ich weiß, dass all die coolen Kids, die heutzutage Postfix verwenden, darüber lachen. Ihre Ubuntu-Community kann Sie beim Einrichten Ihres Mail-Systems unterstützen.

2

Eine Alternative - Ich archiviere alle Root-Mails in einigen Dateien und lösche dann die Original-Mail.

Ich schreibe ein Skript (hier ist der Schlüsselteil) -

#!/bin/bash
if `/usr/bin/mail -e`; then
   /usr/bin/mail --print 2>&1 > /tmp/email_${date +"%Y-%m-%d_%H.%M").log
   echo ‘d *’ | /usr/bin/mail -N > /dev/null
fi
exit 0

Das hält die Dinge aufgeräumt und ich kann ein Auge darauf haben. Ich könnte eine tägliche Mail-Datei per E-Mail an eine externe E-Mail-ID usw. senden.

2
irdroid3