Der ein oder andere wird wahrscheinlich nicht genau wissen, was Cronjobs sind und wofür man diese nutzen kann. Ein Cronjob ist dazu da, um wiederkehrende Aufgaben zu einem bestimmten Zeitpunkt auszuführen. Das kann einem z. B. beim Backupen zu Gute kommen, denn hier möchte man ja nicht jedes Mal das Backup von Hand starten, sondern es soll automatisiert jeden Tag eine Sicherung erstellt werden. In diesem Artikel zeige ich euch, wie ihr selbstständig unter Linux Cronjobs anlegen und verwalten könnt.
Zunächst einmal muss man verstehen, wie ein Cronjob funktioniert. Es gibt den sogenannten Cron-Daemon, welcher die Dateien und Verzeichnisse, welche die Anweisungen beinhalten, die in regelmäßigen Zeitabständen ausgeführt werden sollen. Beim Start lädt Cron alle Crontabs in den Arbeitsspeicher und prüft anschließend jede Minute, ob sich darin eine Aufgabe befindet, die in der aktuellen Minute ausgeführt werden soll.
Cron-Verzeichnisse und -Dateien
Die systemweite Crontab-Datei befindet sich im Verzeichnis /etc/crontab. Diese kann einfach mit einem beliebigen Editor bearbeitet werden.
Außerdem kann im etc. Ordner, auch noch ein Verzeichnis mit dem Namen “cron.d” existiert, können Dateien mit dem gleichen Format wie crontab enthalten. Diese Dateien werden vom cron ebenfalls jede Minute geprüft und gegebenenfalls ausgeführt.
Sonst gibt es im etc-Ordner noch die folgenden Verzeichnisse: cron.hourly, cron.daily, cron.weekly und cron.monthly. Diese enthalten aber keine Crontabs, sondern Shellscripte welche stündlich, täglich, wöchentlich oder monatlich ausgeführt werden.
Crontab-Format
In der Crontab-Datei können Shellvariablen folgendermaßen definiert werden: Variablenname=Wert.
Es gibt aber auch einige Variablen, welche Cron selbstständig setzt. So wird z. B. die Variable mit dem Namen Shell auf /bin/sh gesetzt und die Variablen Home und Logname werden den Userdaten aus der /etc/passwd entnommen.
Die Ausgabe der jeweiligen Kommandos sendet Cron per Mail an den entsprechenden User der Cron-Kommandos. Es kann aber auch mit der Variablen Mailto der Empfänger geändert werden.
Das grundlegende Format für die Zeitdefinition sieht folgendermaßen aus:
Minuten Stunden Tag Monat Wochentag Username Kommando
Die Zeiten können in folgenden Bereichen eingetragen werden:
0-59 0-23 1-31 1-12 0-7
Bei den Zeitangaben können auch ganze Listen angelegt werden, z. B. wenn man bei den Wochentagen 1,3,5 angibt, sind Montag, Mittwoch und Freitag ausgewählt.
Es können aber auch ganze Bereiche angegeben werden. Wenn man hier z. B. bei den Tagen 2–5 eingibt, sind die Tage 2,3,4 und 5 ausgewählt.
Wenn man beim Minutenfeld 0–59/2 angibt, sind zunächst alle Minuten von 0 bis 59 ausgewählt. Aber das /2 gibt an, dass mit einer Schrittweite von 2 gearbeitet werden soll. Das bedeutet, das man den Crontab alle 2 Minuten ausführen möchte. Diese Schreibweise kann man aber auch vereinfachen, indem man einfach nur */2 angibt.
Crontab-Beispiel
Hier ein Beispiel, wie ein Crontab aussehen kann:
# Variablendefinition
SHELL=/bin/bash
PATH=/usr/bin:/bin# Cronbefehle
# Das Programm Backup wird jeden Sonntag um 18.30 Uhr ausgeführt
30 18 * * 7 root Backup
Wenn ihr euch eure eigene Crontab anzeigen lassen möchtet, geht das mit folgendem Befehl:
nano /etc/crontab
Wichtig ist aber, das ihr diese Datei als Root bearbeitet, da ihr sonst nicht die entsprechenden Rechte dafür habt.
User-Crontab
Die User‑Crontabs sind fast identisch mit den „normalen“ Crontabs, aber die User‑Crontabs können auch andere User außer Root bearbeiten. Die User-Crontabs findet man in folgendem Verzeichnis:
/var/spool/cron/tabs/Username
Das Format von der User‑Crontab sieht fast genau gleich aus wie bei der „normalen“ Crontab. Hier kann auf den Usernamen verzichtet werden. So sieht es dann folgendermaßen aus:
Minuten Stunden Tag Monat Wochentag Kommando
Die User können folgende Befehle benutzten:
- crontab –l (zeigt dem User seinen aktuellen Crontab an)
- crontab –r (löscht den Crontab)
- crontab –e (editiert den Crontab)
Crontab-Zugangsberechtigungen
Bei den Crontabs können auch Berechtigungen vergeben werden. Es ist möglich, das man nur bestimmten Usern Zugriff auf die Crontabs gibt. Dazu müssen nur die Benutzer in die /etc/cron.allow Datei eingetragen werden und dann dürfen nur diese mit den Crontabs arbeiten.
Wenn man bestimmte User ausschließen möchte, muss man eine Datei mit dem Namen /etc/cron.deny erstellen und dort die Benutzer eintragen, welche keinen Zugriff auf die Crontabs haben sollen.
Anacron
Anacron ist die etwas andere Cron-Art. Hier gibt man nur die Anzahl der Tage an, wann der Cronjob ausgeführt werden soll. Diese Cron-Art ist vor allem Praktisch wenn der Computer nicht Tag und Nacht läuft. Denn hier wird der Cronjob ausgeführt, wenn der letzte Ablauf eines Jobs länger her ist als die genannte Intervallzeit. So wird ein Job auch dann ausgeführt, wenn der Rechner das nächste Mal gestartet wird, und nicht wie beim „normalen“ Cron-Befehl erst, wenn das nächste Wochenende oder Monatsende erreicht ist.
AT-Spoolsystem
Wenn Kommandos nicht regelmäßig ausgeführt werden sollen, sondern nur zu einem bestimmten Zeitpunkt, ist das mit dem Befehl at möglich. Hier reihen sich die Aufträge in einer Warteschlange ein und werden zu gegebener Zeit ausgeführt.
Es können folgende Befehle benutzt werden:
- at 13:30 (gibt er einen Auftrag in die Warteschlange, welcher um 13:30 Uhr abgearbeitet werden soll. Wenn man seinen Befehl, welcher zur gewünschten Zeit ausgeführt hat eingegeben hat, kann man das Menü mit Strg+D wieder verlassen.
- atq (zeigt alle Aufträge, welche sich in der Warteschlange befinden)
- atrm (Löscht einen Auftrag aus der Warteschlange.)
- atd (arbeitet die Warteschlange ab.)
bei dem at-Spoolsystem können auch wieder Zugangsberechtigungen vergeben werden. Es funktioniert nach dem gleichen Prinzip wie bei den Crontabs, nur heißen die Dateien dieses Mal /etc/at.allow und /etc./at.deny.
Ich hoffe, mit dem Artikel konnte ich euch die Funktionsweise der Cronjobs etwas näherbringen und zeigen, wie ihr selbst Cronjobs anlegen könnt.