Sprache auswählen

Manchmal will man, dass ein Skript/Programm in festen Intervallen oder zu festen Zeiten ausgeführt wird. Dafür ist auf Linux Systemen ein Cronjob eine Möglichkeit.

Cronjob einrichten, die Syntax verstehen

Im Terminal erreicht man

die Crontab, das ist die Tabelle, in der die auszuführenden Cronjobs definiert werden sehr einfach. Beim Ersten Verwenden wird man noch noch danach gefragt, welchen Editor man verwenden möchte. Ich verwende in der Regel nano.

sudo crontab -e

Anschließend öffnet sich die Crontab und nachdem man ganz nach unten gescrollt hat, kann man seinen Cronjob definieren.

Die Syntax, die man verwenden muss, um einen Cronjob anzulegen wird im Crontab nochmals erklärt, hier aber ein kurzer Abriss:

Man kann fünf Zeitpunkte beeinflussen. Dabei können entweder ganz konkrete Zahlenwerte eingesetzt werden oder der Stern bleibt stehen. Mit dem Stern definiert man, dass der Cronjob zu jeder der möglichen Zeitpunkte ausgeführt wird. Wenn man den Stern in Gedanken durch das Wörtchen "Alle" ersetzt, wird es logisch.

 

Ich möchte, dass ein spezielles Python Skript alle (*) 10 Minuten ausgeführt wird. Dann sieht mein Cronjob so aus:

*/10 * * * * python3 /Pfad zu meinem Skript

Die nicht benötigten Stellen bleiben weiterhin als * stehen. Der Slash ist kein Schreibfehler, der muss da hin.

So würde mein Cronjob aussehen, wenn ich jeden Montag um 10:15 einen Cronjob laufen lassen will:

15 10 * * 1 python3 /Pfad zu meinem Skript

 Möchte man einen Cronjob beim Start seines Rechners ausführen, so verwendet man das Kommando @reboot

@reboot pyhton3 /pfad zu meinem Skript

Es gibt noch andere Schlüsselworte, die das Ganze etwas vereinfachen

Schlüsselwort Funktion Bemerkung
@daily täglich um 0:00 Uhr
@hourly stündlich zu jeder vollen Stunde

Sonstiges

Sollte das Skript, dass durch den Cronjob abgearbeitet wird, einen Output erzeugen, bspw. eine Stausmeldung "Job Done" oder ähnliches, erscheint das nirgendwo, denn Crontab öffnet keine Konsole oder ähnliches.

Der Output kann aber umgeleitet werden. Entweder in eine Datei oder in eine E-Mail.

Umleitung in Datei

Durch Anhängen von

>> Pfad zur Logdatei

lässt sich der Output in eine Datei umleiten, also kann ich so überprüfen, ob mein Skirpt, das am 24.12. jeden Jahres einen Weihnachtsmail verschickt funktioniert hat.

1 1 24 12 * python3 /var/schicke_weihnachtsmail.py >> /var/weihnachtsmail.log

Umleitung in E-Mail

Um die Meldung in eine E-Mail definieren muss man mittels der Variable MAILTO einen Empfänger definieren

MAILTO Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.
1 1 24 12 * python3 /var/schicke_weihnachtsmail.py

 Quellen / Weiterführende Links

Das Wiki Ubuntuuser stellt eine sehr umfangreiche Quelle zum Crontab bereit