Cronjob auf dem Raspberry Pi einrichten

businessman-surrounded-by-clocks

Was ist ein Cronjob?

Cronjobs sind Skripte oder Aufgaben, die zu einem bestimmten Zeitpunkt automatisch vom System ausgeführt werden sollen. Das System eignet sich desonders gut für Aufgaben die immer wieder anstehen und die kein Eingreifen des Users verlangen, zum Beispiel Backups, Logs auswerten, Daten synchronisieren oder Benachrichtigungen versenden. Cronjobs sind eigentlich das Selbe wie die „Geplanten Tasks“ unter Windows und funktionieren auf dem Raspberry Pi genauso wie auf jedem anderen Linux-System.

Der Cron-Dienst läuft auf Raspberry Pi OS Bookworm wie gewohnt im Hintergrund und ist standardmäßig aktiv. Ihr müsst nichts installieren oder konfigurieren um loszulegen.

Wie erstelle ich einen Cronjob?

Die einfachste Möglichkeit vorweg – wem das bereits reicht, braucht den Rest der Anleitung nicht mehr zu lesen:

Wenn man ein Script jeden Tag ausführen will, kopiert man es einfach in den Ordner /etc/cron.daily, für einmal pro Woche in /etc/cron.weekly und einmal pro Monat in /etc/cron.monthly – das war’s bereits. Die Rechte des Scripts müssen natürlich stimmen: chmod 700 script.sh

Wer mit den Intervallen der vorgefertigten Ordner nicht zurecht kommt hat zwei verschiedene Möglichkeiten einen Cronjob einzutragen: Zum einen von Hand in der Datei /etc/crontab, die aber nur vom User root (sudo su) geändert werden kann, oder mit dem Befehl crontab -e (Job läuft unter dem aufrufenden Benutzer). Für die meisten Anwendungsfälle empfiehlt sich crontab -e, da hier kein Root-Zugriff nötig ist.

Wie muss ein Cronjob aussehen?

Zuerst zeige ich euch die Möglichkeit über die Datei /etc/crontab. Wir machen uns zum Root und editieren die Datei mit dem Editor Nano.

Der Aufbau der Job-Einträge in der Datei ist wie folgt:

Mögliche Zeitwerte für die Planung eines Jobs sind:

  • Minute: 0-59
  • Stunde: 0-23
  • Tag des Monats: 1-31
  • Monat: 1-12
  • Tag der Woche: Möglich ist 0-7, wobei 0 und 7 jeweils der Sonntag ist.
  • User: Der Benutzer unter dem das Script ausgeführt werden soll.
  • Befehl: Konsolen-Befehl oder Script das ausgeführt wird

Wie sieht ein solcher Aufruf nun komplett aus?

Ein Job befindet sich immer in einer Zeile der Datei, hier ein Beispiel für einen kompletten Cronjob Eintrag:

Das Script /root/scripts/backup.sh würde nun jeden Tag um 15 Uhr ausgeführt. Wie man an diesem Beispiel sieht werden die Werte die nicht benötigt werden mit einem Stern (*) gekennzeichnet. Es ist in diesem Fall ja egal was für ein Tag ist, in welchem Monat wir uns befinden und auch ob es Dienstag oder Donnerstag ist.

Über den Befehl crontab -e funktioniert das ganz ähnlich, es fällt nur die Spalte Benutzer weg, da der Job unter dem Benutzer läuft, der den Cronjob angelegt hat.

Für die Zeitplanung eines Cronjobs gibt es noch einige weitere Möglichkeiten die Werte anzugeben:

  • Listen: Mit Komma (,) getrennte Werte. Zum Beispiel 8,12 um ein Script um 8 und 12 Uhr auszuführen.
  • Zahlenfolgen: Mit Bindestrich (-) getrennte Werte. Zum Beispiel 8-12 um den Job um 8,9,10,11 und 12 Uhr auszuführen.
  • Stufen: */Stufe, wird genutzt um z.B. „alle fünf Minuten“ oder „jeden 2. Tag“ zu erstellen. Zum Beispiel */2 um das Script alle zwei Stunden auszuführen.

Besondere Aufrufe

Für besondere Ereignisse kann man anstatt der 5 Zeitdaten eines der Folgenden einsetzen:

  • @reboot Ausführen beim Systemstart
  • @yearly Einmal pro Jahr
  • @monthly Einmal pro Monat
  • @weekly Einmal pro Woche
  • @daily Einmal am Tag
  • @hourly Einmal pro Stunde

Folgendes Beispiel führt das Script backup.sh beim Systemstart unter dem Benutzer root aus:

Output und Fehlermeldungen

Schreibt man in die /etc/crontab folgende Zeile, wird die gesamte Ausgabe der Jobs per Mail an den User root gesendet:

Will man nur bei bestimmten Jobs keine Meldung, fügt man > /dev/null an den Aufruf an, damit werden die Meldungen ins Nichts geleitet und tauchen nicht im Log auf:

Um nur Fehler zu erhalten und die restliche Ausgabe zu unterdrücken kann 2>&1 angefügt werden, damit werden Fehler auf die normale Ausgabe umgeleitet, und das ist wieder ins Nichts (/dev/null):

Cronjob Logs prüfen

Auf Raspberry Pi OS Bookworm können Cronjob-Ausführungen und eventuelle Fehler direkt eingesehen werden:

Oder über journalctl:

Falls kein Output erscheint und ihr sicher seid, dass der Job gelaufen ist, prüft ob der Cron-Dienst aktiv ist:

Cronjob Beispiele

Hier noch einige Beispiele für die zeitliche Planung eurer Cronjobs:

Script wird jede Minute ausgeführt.

Bewirkt das Selbe wie der Aufruf oben.

Script wird jede Stunde um 10 nach ausgeführt. (14.10, 15.10 etc.)

Script wird jeden Tag um 10.00 und 12.00 Uhr ausgeführt.

Script wird am 2., 3. und 4. jeden Monats um 0.00 Uhr ausgeführt.

Script wird vom April bis August jeden zweiten Tag um 13.40 und 13.50 ausgeführt, wobei die Ausgabe wie auch die Fehlermeldungen nicht verschickt werden.

Script wird alle 2 Minuten aufgerufen wobei der Output des Scripts nicht verschickt wird.

Wer komplexere Automatisierungen benötigt, für die Cronjobs zu unflexibel sind, sollte einen Blick auf systemd Timer werfen – diese bieten mehr Kontrolle über Abhängigkeiten und Logging. Für die meisten einfachen Aufgaben auf dem Raspberry Pi sind Cronjobs aber nach wie vor die schnellste und einfachste Lösung.

Ähnliche Beiträge