Cronjob auf dem Raspberry Pi einrichten

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 deshalb besonders gut für Aufgaben die immer wieder anstehen und die kein Eingreifen des Users verlangen, zum Beispiel Backups, Logs auswerten, Mails versenden etc. Cronjobs sind eigentlich das Selbe wie die „Geplanten Tasks“ unter Windows.

Wie erstelle ich einen Cronjob?

Die einfachste Möglichkeit vorweg – wem das bereits reicht braucht den 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 und 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).

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 komplette 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 das der Job unter dem Benutzer laufen wird, 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, die vom Script generiert werden 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 ). Zum Beispiel:

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.