Der Cron-Daemon führt Aufgaben automatisch zu festgelegten Zeitpunkten aus. Mit crontab verwaltest du diese sogenannten Cron-Jobs – ideal für Backups, Systemupdates oder regelmäßige Wartungsaufgaben.

Die Crontab-Datei

Eine Crontab-Datei (Cron-Tabelle) enthält die Zeitpläne für deine Cron-Jobs. Es gibt zwei Arten:

Benutzer-Crontabs werden pro Benutzer angelegt. Der Speicherort variiert je nach Distribution:

  • Red Hat, CentOS, Fedora: /var/spool/cron
  • Debian, Ubuntu: /var/spool/cron/crontabs

System-Crontabs befinden sich in /etc/crontab und /etc/cron.d/. Nur Administratoren können diese bearbeiten.

Bearbeite Crontab-Dateien nie direkt. Verwende stattdessen den crontab-Befehl – er prüft die Syntax und verhindert Fehler.

Syntax

Jede Zeile in einer Crontab-Datei besteht aus fünf Zeitfeldern und dem auszuführenden Befehl:

* * * * * befehl
│ │ │ │ │
│ │ │ │ └── Wochentag (0-7, Sonntag = 0 oder 7)
│ │ │ └──── Monat (1-12)
│ │ └────── Tag des Monats (1-31)
│ └──────── Stunde (0-23)
└────────── Minute (0-59)

Operatoren

Die Zeitfelder unterstützen vier Operatoren:

OperatorBedeutungBeispiel
*Jeder Wert* * * * * = jede Minute
,Liste von Werten1,15,30 = Minute 1, 15 und 30
-Wertebereich1-5 = Montag bis Freitag
/Schrittweite*/10 = alle 10 Einheiten

Der Schrittoperator / lässt sich mit Bereichen kombinieren: 8-18/2 bedeutet alle 2 Stunden zwischen 8 und 18 Uhr.

System-Crontab-Syntax

Die systemweite Crontab (/etc/crontab) enthält ein zusätzliches Feld für den Benutzer:

* * * * * benutzername befehl

Der crontab-Befehl

Mit crontab verwaltest du deine Cron-Jobs:

crontab -e              # Crontab bearbeiten (oder erstellen)
crontab -l              # Aktuelle Crontab anzeigen
crontab -r              # Crontab löschen
crontab -i              # Crontab löschen (mit Bestätigung)
crontab -u benutzer -e  # Crontab eines anderen Benutzers bearbeiten (root)

Der Befehl öffnet den Editor, der in der Umgebungsvariable VISUAL oder EDITOR festgelegt ist.

Vordefinierte Zeitangaben

Statt der fünf Zeitfelder kannst du diese Kurzformen verwenden:

KurzformEntsprichtBedeutung
@yearly0 0 1 1 *Jährlich am 1. Januar
@monthly0 0 1 * *Monatlich am 1. um Mitternacht
@weekly0 0 * * 0Wöchentlich am Sonntag
@daily0 0 * * *Täglich um Mitternacht
@hourly0 * * * *Stündlich zur vollen Stunde
@rebootBei jedem Systemstart

Umgebungsvariablen

Cron setzt einige Variablen automatisch. Du kannst sie in der Crontab überschreiben:

PATH=/usr/local/bin:/usr/bin:/bin
SHELL=/bin/bash
HOME=/home/benutzer
MAILTO=admin@example.com

0 2 * * * /pfad/zum/backup.sh

PATH: Standardmäßig nur /usr/bin:/bin. Gib bei Befehlen außerhalb dieser Verzeichnisse den absoluten Pfad an oder erweitere PATH.

MAILTO: Cron sendet die Ausgabe eines Jobs per E-Mail an den Benutzer. Mit MAILTO="" unterdrückst du diese E-Mails.

Praktische Beispiele

Backup täglich um 2 Uhr nachts

0 2 * * * /home/benutzer/backup.sh

Skript alle 15 Minuten ausführen

*/15 * * * * /pfad/zum/skript.sh

Befehl werktags um 9 Uhr

0 9 * * 1-5 /pfad/zum/befehl

Stündlich zwischen 8 und 18 Uhr

0 8-18 * * * /pfad/zum/skript.sh

Am 1. und 15. jeden Monats um 6 Uhr

0 6 1,15 * * /pfad/zum/skript.sh

Jeden ersten Montag im Monat

0 7 1-7 * 1 /pfad/zum/skript.sh

Diese Kombination prüft, ob der Tag zwischen 1 und 7 liegt und ein Montag ist.

Ausgabe in Logdatei umleiten

*/5 * * * * /pfad/zum/skript.sh >> /var/log/mein-skript.log 2>&1

Die Umleitung 2>&1 schreibt Standardausgabe und Fehlermeldungen in dieselbe Datei.

Ausgabe unterdrücken

0 * * * * /pfad/zum/skript.sh > /dev/null 2>&1

Zugriffskontrolle

Mit zwei Dateien steuerst du, welche Benutzer Cron-Jobs erstellen dürfen:

  • /etc/cron.allow – Nur aufgeführte Benutzer dürfen crontab verwenden
  • /etc/cron.deny – Aufgeführte Benutzer sind ausgeschlossen

Existiert /etc/cron.allow, wird /etc/cron.deny ignoriert. Existiert keine der beiden Dateien, können nur Administratoren Cron-Jobs erstellen.

Zusammenfassung

Cron automatisiert wiederkehrende Aufgaben auf der Kommandozeile. Mit crontab -e erstellst und bearbeitest du deine Jobs. Die fünf Zeitfelder (Minute, Stunde, Tag, Monat, Wochentag) bestimmen den Ausführungszeitpunkt. Für häufige Intervalle gibt es Kurzformen wie @daily oder @hourly.