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:
crontab -l
listst alle Einträge in der crontab des aufrufenden Benutzers auf
crontab -e
öffnet die crontab des aufrufenden Benutzers in einem Editor zur Bearbeitung
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.