cronic bringt cronjobs zum Schweigen
Fr, 14. April 2023, Uwe Burger
Eine der besten Eigenschaften und gleichzeitig die schlechteste Eigenschaft von cron ist das automatische Versenden von E-Mails. Cron sendet die Ausgabe eines Cronjobs automatisch per E-Mail an den Benutzer, unter dem der Cronjob ausgeführt wird.
Zunächst scheint es sich dabei um eine sinnvolle Funktion zu handeln. Denn wenn Cronjobs über einen längeren Zeitraum automatisch im Hintergrund laufen, kann eine E-Mail-Benachrichtigung im Falle eines Fehlers hilfreich sein.
Leider betrachtet Cron jede Ausgabe als wichtig, so auch die Standardausgabe. Viele Unix-Befehle senden Statusinformationen an die Standardausgabe. Einige Befehle haben eine Quiet-Option, über die dann allerdings in einigen Fällen auch die Fehlerausgabe abschaltet wird. Erschwerend kommt hinzu, dass Cron Return-Codes ignoriert, was bedeutet, dass Fehler von "ruhigen" Programmen ignoriert werden.
Es ist daher fast unmöglich, einen Cronjob zu erstellen, der "leise" genug ist, um ohne Ausgabe zu laufen, aber dennoch alle Fehler meldet. Nach dem Prinzip "Schlimmer ist besser" besteht die typische Lösung darin, alles unter den Teppich zu kehren, indem alle Ausgaben nach /dev/null umgeleitet werden:
0 1 * * * Sicherung >/dev/null 2>&1
Wenn ein Cronjob fehlschlägt, wird man darüber nicht informiert. Falls man beispielsweise Cron nutzt, um Dateien zu sichern, erfährt man möglicherweise über einen längeren Zeitraum nicht, dass die Sicherung fehlgeschlagen ist. Im schlimmsten Fall kann dies zu einem Dateiverlust führen.
Abhilfe schafft Cronic. Dabei handelt es sich um ein kleines Shim-Shell-Skript, mit dem man Cron-Jobs so verpacken kann, dass Cron nur dann eine E-Mail sendet, wenn ein Fehler aufgetreten ist.
Cronic definiert dabei einen Fehler als jede non-trace Fehlerausgabe oder einen Ergebniscode ungleich Null. Cronic filtert Bash execution traces aus der Fehlerausgabe, sodass Befehle mit execution traces ausgeführt werden können, um die Fehlersuche zu erleichtern. Cronic selbst hat dabei keine Optionen und führt lediglich den darauf folgenden Befehl aus.
0 1 * * * cronic backup
Installiert wird das Werkzeug z. B. mit apt install cronic
Quelle: https://habilis.net/cronic