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