/etc/cron.daily/foo: E-Mail an einen bestimmten Benutzer anstatt an root senden?

13

Ich verwende CentOS 5.5.

In /etc/cron.daily/ sind mehrere Cronjobs gespeichert. Wir möchten, dass die E-Mail für einige dieser Cronjobs an eine bestimmte E-Mail-Adresse gesendet wird, während der Rest der E-Mails in /etc/cron.daily/ an die Standard-E-Mail-Adresse (root @ localhost) gesendet wird.

Cronjobs in /etc/cron.daily/ werden aus der Datei / etc / crontab ausgeführt. / etc / crontab gibt ein 'MAILTO'-Feld an. Kann ich dies überschreiben, indem ich MAILTO in meinem /etc/cron.daily/foo-Cronjob einstelle?

Wie geht man am besten damit um?

Stefan Lasiewski
quelle
Hinweis für Benutzer von CentOS 6.5 (cronie): /etc/crontablegt keine Standardeinstellungen fest .
Adam Monsen

Antworten:

13

Einstellung [email protected]in /etc/cron.daily/foonicht funktioniert. Die Skriptausgabe wird nicht an [email protected] gesendet.

Die Seite unter http://www.unixgeeks.org/security/newbie/unix/cron-1.html schlägt ebenfalls eine einfache Lösung vor:

Die Datei /etc/cron.daily/fooenthält jetzt Folgendes:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" [email protected]

Dies sendet eine E-Mail an '[email protected]' mit dem Betreff, der dem vollständigen Pfad des Skripts entspricht (z /etc/cron.daily/foo. B. ).

Das sagt Unixgeeks.org dazu:

Ausgabe von Cron

Wie ich bereits sagte, wird die Ausgabe von cron an den Eigentümer des Prozesses oder an die in der Variablen MAILTO angegebene Person gesendet. Aber was ist, wenn Sie das nicht möchten? Wenn Sie die Ausgabe an eine andere Person senden möchten, können Sie sie einfach an den Befehl mail weiterleiten. z.B

cmd | mail -s Benutzer "Betreff der Mail"

Manchmal möchte ich nur die Fehler eines Cronjobs erhalten, nicht die Standardausgabe, also benutze ich diesen Trick. Die Syntax mag auf den ersten Blick falsch aussehen, aber Sie können sicher sein, dass sie funktioniert. Der folgende Cronjob sendet STDOUT an / dev / null und verarbeitet dann STDERR über die Pipeline.

doit 2>&1 >/dev/null | mailx -s "$0" [email protected]

Gleiche Sache, aber an Syslog senden:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Siehe auch meine Antwort auf ServerFault auf Cronjob stderr zu Datei und E-Mail

Stefan Lasiewski
quelle
6

Eine elegantere Lösung wäre die /etc/cron.ddirekte Verwendung . Anstatt Ihr Skript in zu haben /etc/cron.daily, legen Sie es irgendwo ab /usr/local/sbin/myscript.shund erstellen Sie die Datei /etc/cron.d/myscriptwie folgt :

MAILTO=root,[email protected]
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Dies gibt Ihnen auch viel mehr Kontrolle darüber, wann der Auftrag ausgeführt wird. Zum Beispiel nur an bestimmten Wochentagen usw. crontab(5)Weitere Informationen erhalten Sie beim Mann.

Codebart
quelle
0

Angenommen, Sie haben auf diesem Computer SA-Zugriff, können Sie ein neues Benutzerkonto erstellen und die Aufgaben zu den Cron-Aufgaben dieses Kontos hinzufügen. Die E-Mail für diesen Benutzer kann dann mithilfe einer Weiterleitungsdatei in diesem Basisordner des Kontos weitergeleitet werden. Möglicherweise müssen Sie Berechtigungen für diesen Benutzer einrichten, wenn für die Cron-Tasks ein privilegierter Zugriff erforderlich ist.

Ob diese oder Stefans Antwort am besten passt, hängt davon ab, wie viel Aufwand Sie beim Einrichten des Programms benötigen und ob Fehlermeldungen an die Stamm-E-Mail-Adresse oder an die Personen gesendet werden sollen, die normalerweise die tägliche Ausgabe überwachen.

Viel Glück

Michael Shaw
quelle