Ein paar Worte zu Cron-Jobs

Im Rahmen dieses Projekts habe ich mich endlich, nach bestimmt 20 Jahren regelmäßiger Nutzung von Linux/UNIX-Systemen, mit dem Thema Cron-Jobs auseinandergesetzt. Cron-Jobs sind Aufgaben, die nach einem festgelegten Muster wiederkehrend ausgeführt werden sollen, also eine einfache Art der Automatisierung. Zuständig dafür ist in UNIX-Systemen das Programm cron (bzw. ein entsprechender Ersatz wie anacron); das Konzept an sich existiert laut Wikipedia wohl seit 1975.

Cron-Jobs werden über die crontab gesteuert, eine Konfigurationsdatei im Textformat mit sehr charakteristischem Aufbau. Genau genommen gibt es sogar viele crontabs, auf meinem Raspberry Pi konnte ich auf Systemebene /etc/crontab sowie einzelne Fragmente in /etc/cron.d/ identifizieren, wobei erstere Einträge für die Abarbeitung der Verzeichnisse /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/ und /etc/cron.monthly/ enthält, in denen wiederum normale Skripte/Programme liegen. Auf Benutzerebene gibt es crontabs unter /var/spool/cron/crontabs/<username>.
Als einfacher Anwender (sowohl nicht-privilegierte Benutzer als auch root) muss man sich nicht mit den Systemdateien beschäftigen. Stattdessen gibt es das Programm crontab, das die Komplexität versteckt und auf zwei einfache Anwendungsfälle runterbricht:

Der Editor wird dabei über die Umgebungsvariablen VISUAL bzw. EDITOR bestimmt. Statt die crontab des aufrufenden Benutzers zu verwenden kann mit -u auch ein anderer Benutzer angegeben werden. Viel mehr muss man eigentlich nicht wissen, außer die etwas eigenwillige Syntax:

30 * * * * docker stats --no-stream

Mit diesem Eintrag werden jede Stunde um 30 Minuten nach (also 0:30, 1:30, 2:30, ...) die Docker-Statistiken abgerufen. Die Schreibweise ist im crontab-Template erklärt, aber man kann auch eine der vielen Webseiten nutzen, die einen crontab in Verständlich und zurück übersetzen. In die eine Richtung kann das z.B. auch meine Lieblingssuchmaschine DuckDuckGo: eine "Suche" nach crontab 30 * * * * ergibt z.B. die Ausgabe "30 minutes after every hour every day".

Die Ausgabe der Befehle wird per E-Mail an den Aufrufer gesendet, was typischerweise bedeutet, dass es lokal nach /var/mail/<username> zugestellt wird und entweder mit dem sehr rudimentären Programm mail angesehen werden kann, oder mit jedem beliebigen anderen Mailprogramm, das von diesem Ort lesen kann (z.B. mutt). Dies ist übrigens auch das Geheimnis, warum die Installation von cron meistens auch die Installation eines Mail Transport Agents nach sich zieht.


Zurück zur Hauptseite