Datum: 2004-01-26
Quelle: debian-user-german
Auf vielen Server-Systemen laufen jede Menge cron-Jobs zur Erledigung der periodischen Arbeiten. Nun ist es so, dass alles, was per stdout oder stderr von den aufgerufenen Programmen ausgegeben wird, mangels Terminal per Mail an den Benutzer geschickt wird. Diese Meldungen sind oft hilfreich, wenn der Grund für einen Fehler gesucht wird, können aber ziemlich lästig werden, wenn der Job eigentlich sauber abgelaufen ist und nur einige beteiligte Programme zu redselig sind. Es gibt wie immer mehrere Möglichkeiten zur Abhilfe:
Ich habe in diesem Fall die letzte Variante vorgeschlagen. Der Eintrag in die crontab-Datei kann beispielhaft wie folgt aussehen (in einer Zeile zu schreiben):
*/5 * * * * root LOG=/tmp/script$$.log; /path/to/script >$LOG \
2>&1 || /bin/cat $LOG; /bin/rm $LOG
Zuerst wird eine Protokolldatei definiert, die die Prozess-ID des Jobs beinhaltet (damit sich parallel laufende Instanzen nicht ins Gehege kommen). Beide Ausgabekanäle des Scripts werden in die Datei umgelenkt (will man nur stderr haben, wird einfach stdout ins Nirvana geschickt). Wenn das Script mit einem Returncode ungleich 0 beendet wird, wird die Protokolldatei ausgegeben. Anschließend wird sie gelöscht.
Noch eine Anmerkung: die o. g. Syntax gilt für die nur unter Linux existierende Datei /etc/crontab, will man die benutzerspezifischen crontabs nutzen, entfällt die Angabe des Benutzers im 6. Feld ("root").