Ich habe endlich einen realistischen Backup-Zeitplan für meine Daten durch ein Shell-Skript erstellt, das von cron in engen Intervallen verarbeitet wird. Leider bekomme ich jedes Mal leere E-Mails, wenn der CRON ausgeführt wurde und nicht nur, wenn etwas schief geht.
Ist es möglich, CRON nur dann zum Senden von E-Mails zu veranlassen, wenn etwas schief geht, z. mein TAR
nicht wie vorgesehen ausführen?
Hier ist, wie meine Crontab für den Moment eingerichtet ist;
0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com
Vielen Dank!
/bin/backup.sh > log_file || (echo Backup failed with exit status $?; cat log_file)
?Die Verwendung von cronic- Wrapper-Skripten scheint eine gute Idee zu sein. Um es zu benutzen, müssen Sie Ihre Skripte nicht ändern.
Anstatt:
machen:
Einfach gesagt; es wird still laufen, wenn alles glatt läuft (Exit-Status 0), aber es wird ausführlich berichtet, wenn nicht, und cron wird die Mail-Berichterstellung behandeln.
Weitere Informationen unter https://habilis.net/cronic/ .
quelle
chronic
aus demmoreutils
Paket: joeyh.name/code/moreutilsSie weisen ausdrücklich
cron
an, immer E-Mails zu senden, auch wenn dies/bin/backup.sh
(im/usr/local/bin
Übrigen) erfolgreich sein sollte. Lassen Sie einfach den| mail -s "Backup status" [email protected]
Teil weg und die E-Mail wird nur gesendet, wenn eine Ausgabe erfolgt. Sie können wahrscheinlich (abhängig von Ihrercron
) die E-Mail-Adresse, an die gesendet werden soll, explizit als Zuweisung in der crontab-Datei festlegen.Einzelheiten finden Sie unter
quelle
Du solltest die
stderr
anmd nicht beidesstdout
und leitenstderr
.Verwenden Sie
1> /dev/null
nicht2>&1
und es sollte in Ordnung sein. Möglicherweise müssen Sie den Fehler auch in Ihrem Sicherungsskript korrekt melden.quelle
Hier ist eine weitere Variante, die ich seit vielen Jahren erfolgreich verwende: Erfassen Sie die Ausgabe und drucken Sie sie nur bei Fehlern aus , um eine E-Mail auszulösen. Dies erfordert keine temporären Dateien und behält die gesamte Ausgabe bei . Der wichtige Teil ist der
2>&1
, der STDERR zu STDOUT umleitet.Senden Sie die gesamte Ausgabe über die Standard-Cron-Mailer-Konfiguration:
Gleich, aber mit einer bestimmten Adresse und Betreff:
(Die Adresse kann auch geändert werden, indem MAILTO = xxxx für die gesamte crontab-Datei festgelegt wird.)
Sie können sogar mehrere Aktionen bei Fehlern ausführen und der E-Mail hinzufügen:
Dies funktioniert für einfache Befehle. Wenn Sie es mit komplexen Pipes (
find / -type f | grep -v bla | tar something-or-other
) zu tun haben, sollten Sie den Befehl in ein Skript verschieben und das Skript mit dem oben beschriebenen Ansatz ausführen. Der Grund ist, dass Sie immer noch E-Mails erhalten, wenn ein Teil der Pipe an STDERR ausgegeben wird.quelle