Linux crontab

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:

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:

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:

Schauen wir uns dazu das Beispiel des Rundspruchautomaten an.

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:

/etc/crontab hier wird die gleiche Syntax verwendet wie bei crontrab -e. Es ist muss aber vor dem eigentlichen Befehl, der zeitgesteuert ausgeführt werden soll,  der user angegeben werden.

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.