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:
| Operator | Bedeutung | Beispiel |
|---|---|---|
* | Jeder Wert | * * * * * = jede Minute |
, | Liste von Werten | 1,15,30 = Minute 1, 15 und 30 |
- | Wertebereich | 1-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:
| Kurzform | Entspricht | Bedeutung |
|---|---|---|
@yearly | 0 0 1 1 * | Jährlich am 1. Januar |
@monthly | 0 0 1 * * | Monatlich am 1. um Mitternacht |
@weekly | 0 0 * * 0 | Wöchentlich am Sonntag |
@daily | 0 0 * * * | Täglich um Mitternacht |
@hourly | 0 * * * * | Stündlich zur vollen Stunde |
@reboot | – | Bei 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ürfencrontabverwenden/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.