News Ticker

Cronjobs unter Linux

Der ein oder andere wird wahrscheinlich nicht genau wissen was Cronjobs sind und wofür man diese nutzten kann. Ein Cronjob ist dazu da um wiederkehrende Aufgaben zu einem bestimmten Zeitpunkt auszuführen. Das kann einem z.B. beim Backupen zu guten 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 selbstä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 Arbeitsspeichert 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” existieren dieses kann 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 selbstä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 Grundlegen 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 Zeitangeben können auch ganze Listen angelegt werden z.B. wenn man bei den Wochentagen 1,3,5 angibt sind Monat, 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 das mit einer Schrittweite von 2 gearbeitet werden soll. Das bedeutet das man den Crontab alle 2 Minuten ausführen möchte. Diese Schreibweiße 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 folgenden 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 sehr ähnlich wie die “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 wie bei der “normalen” Crontab aus. 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 einen Auftrag in die Warteschlange welcher um 13.30 Uh abgearbeitet werden soll. Wenn man seinen Befehl welcher zur gewünschten Zeit ausgeführt hat eingegeben hat kann man das Menu 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äher bringen und zeigen wie Ihr selber Cronjobs anlegen könnt.