Unter Linux können Programme oder Skripte zeitgesteuert zu einem bestimmten Zeitpunkt oder auch wiederkehrend gestartet werden. Diese zeitgesteuerten Abläufe nennt man Cronjobs.
Diese Vorgänge können einzelne Befehle, Programme, z.B. Python Programme, PHP- und sonstige Scripts oder auch eine Anreihung von Linux-Befehlen sein. Beispielsweisse werden Backups, die wöchentlich, täglich oder stündlich durchgeführt werden sollen meist per Cronjob ausgeführt. So auch beim Rundspruchautomaten, der bei DB0QH die Ausstrahlung des Rundspruchs durchführt.
Die Tabelle, respektive die Datei, in der die Befehle gespeichert werden, nennt sich crontab. crontab ist aber auch der Befehl mit dem die Tabelle mit den Cronjobs bearbeitet werden kann. Der Befehl lautet dann wie folgt:
1 |
crontab -e |
Es öffnet sich sodann ein Editor in dem die crontab bearbeitet werden kann. Beim erstmaligen Starten des Befehls crontab wird man nach dem Editor gefragt, den man zukünftig für die Bearbeitung der crontab verwenden möchte. Anschließend kann die crontab verändert werden oder es kann eine neue Zeile mit einem weiteren Befehl, Script oder Programm eingetragen werden.
Nachfolgend das Beispiel für eine crontab beim Rundspruchautomaten:
1 |
00 11 * * 0 /usr/bin/python3 /home/pi/rundspruch/rundspruch.py |
Wichtig ist hier, dass immer der komplette Pfad angegeben wird. Damit sichergestellt ist, dass der cronjob auch die gewünschten Dateien bzw. Programme findet. In diesem Beispiel wird ein Python Programm jeden Sonntag um 11 Uhr gestartet. Dabei ist innerhalb des Python-Programms ebenfalls darauf zu achten, dass dort immer die absoluten Pfade angegeben werden, wenn weitere Dateien, wie in diesem Beispiel der sonntägliche Rundspruch, aufgerufen werden sollen.
Schauen wir uns aber nun den Aufbau einer Befehlszeile innerhalb einer crontab an:
1 2 3 4 5 6 7 8 |
* * * * * auszuführender Befehl, Script, Programm ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └──── Wochentag (0-7, Sonntag ist 0 aber auch 7) │ │ │ └────── Monat (1-12) │ │ └──────── Tag (1-31) │ └────────── Stunde (0-23) └──────────── Minute (0-59) |
Schauen wir uns dazu das Beispiel des Rundspruchautomaten an.
1 2 3 4 5 6 7 8 |
00 11 * * 0 /usr/bin/python3 /home/pi/rundspruch/rundspruch.py ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └──── Wochentag (jeden Sonntag starten) │ │ │ └────── Monat (jeden Monat ausführen) │ │ └──────── Tag (an allen Tagen, sofern Sonntag, siehe oben) │ └─────────── Stunde (zur 11. Stunde) └────────────── Minute (zur 0. Minute) |
Diese Zeile startet den Rundspruch jeden Sonntag um 11:00 Uhr.
Für die Zeitwerte sind neben den genauen Zeitangaben noch folgende Wildcards möglich:
* –> Ausführung immer (zu jederMinute, Stunde, jedem Tag, Monat oder Wochentag)
*/n –> Ausführung alle n (z.B. /10 bei Minute bedeutet alle 10 Minuten)
n,x,y –> Ausführung bei n, x und y (z.B. 1, 8, 15, 22 bei Tag bedeutet am 1., 8., 15., 22. eines Monats
Neben der crontab die mit crontab -e bearbeitet wird, gibt es noch weitere Tabellen, die ich hier kurz vorstellen möchte:
Die folgenden Crontabs werden verwendet wenn Aufgaben in einem bestimmten Zeitintervall ausgeführt werden sollen sollen, der exakte Zeitpunkt aber egal ist.
/etc/cron.monthly/ –> Einmal monatlich wann genau ist egal.
/etc/cron.weekly/ –> Einmal wöchentlich, wann genau ist egal.
/etc/cron.daily/ –> Einmal täglich, zu welcher Uhrzeit ist egal.
/etc/cron.hourly/ –> Einmal stündlich, zu welcher Minute ist egal.
Ziel war es einen kleinen Einblick in die Erstellung von crontabs zu geben. Ich schreibe diesen Beitrag aber auch für mich selbst, damit ich zukünftig nicht immer woanders nachsehen muss, wenn ich mal wieder Infos für eine crontab brauche.
Du muss angemeldet sein, um einen Kommentar zu veröffentlichen.