Frage Cron: Erhalten Sie nur Fehler in E-Mails?


Schließlich habe ich über ein Shell-Skript einen realistischen Backup-Zeitplan für meine Daten erstellt, die in engen Zeitabständen von cron gehandhabt werden. Leider bekomme ich jedes Mal, wenn der CRON ausgeführt wird, leere E-Mails und nicht nur, wenn etwas schief läuft.

Ist es möglich, CRON nur dann per E-Mail zu versenden, wenn etwas schief läuft? meine TAR führt nicht wie vorgesehen aus?

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

Danke vielmals!


34
2018-01-24 09:40


Ursprung




Antworten:


Im Idealfall möchten Sie, dass Ihr Backup-Skript nichts ausgibt, wenn alles wie erwartet abläuft und nur dann eine Ausgabe erzeugt, wenn etwas schief läuft. Verwenden Sie dann die Umgebungsvariable MAILTO, um eine von Ihrem Skript generierte Ausgabe an Ihre E-Mail-Adresse zu senden.

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh

Wenn Ihr Skript normalerweise eine Ausgabe erzeugt, aber Sie interessieren sich nicht dafür in Cron, schicken Sie es einfach an / dev / null und es wird Ihnen nur eine E-Mail schicken, wenn etwas in stderr geschrieben wird.

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh > /dev/null

45
2018-01-24 09:53



Das ist kaum ideal. Normalerweise möchten Sie die gesamte Ausgabe (stdout + stderr) per E-Mail erhalten, wenn der Befehl mit einem Fehlercode ungleich null endet. Ansonsten ist es in der Regel in Ordnung, wenigstens die Hälfte zu verschlingen. Für mich ist das ein Konstruktionsfehler von Cron. - Witiko
@ Witiko ich stimme zu; Ich habe diese Frage gefunden, um das zu beheben. Ich schätze, du kannst deinen Cron-Befehl machen /bin/backup.sh > log_file || (echo Backup failed with exit status $?; cat log_file)? - Daniel H


Verwenden chronisch Wrapper-Skript sieht nach einer guten Idee aus; Um es zu benutzen, müssen Sie Ihre Skripte nicht ändern.

Anstatt:

 0 1 * * * backup >/dev/null 2>&1

tun:

 0 1 * * * cronic backup


Weitere Informationen zu http://habilis.net/cronic/.


20
2018-02-13 21:43



Ich sehe wirklich nicht, wie das helfen wird, wenn das Problem nichts anderes als eine falsche Cron-Linie ist und Cron genau das tut, was es zu tun hat. - John Gardeniers
@JohnGardeniers hilft es da man manchmal ohne Fehler ausgegeben hat. - Mikhail
Alternative, chronic von dem moreutils Paket: joeyh.name/code/moreutils - Vladimir Panteleev


Du solltest die Regie führen stderr und nicht beides stdout und stderr.

Benutzen 1> /dev/null nicht 2>&1 und es sollte in Ordnung sein. Möglicherweise müssen Sie den Fehler auch in Ihrem Sicherungsskript korrekt melden.


3
2018-01-24 09:51





Sie sind speziell anweisend cron immer Email senden, auch wenn /bin/backup.sh (übrigens sollte es sein /usr/local/bin) gelingt es. Einfach weglassen | mail -s "Backup status" email@example.com Teil und E-Mail werden nur gesendet, wenn eine Ausgabe erfolgt. Sie können wahrscheinlich (abhängig von Ihrem cron) Legen Sie die E-Mail-Adresse explizit als eine Zuweisung in der Crontab-Datei an.

Für Details, siehe

man 5 crontab

3
2018-01-24 09:49