Backups, Aufräum-Skripte, regelmäßige Updates: Viele Aufgaben auf einem Linux-Server sollen automatisch zu festen Zeiten laufen. Genau dafür gibt es Cron. In dieser Anleitung lernst du, wie du Cronjobs unter Linux mit crontab einrichtest – von der Syntax der fünf Zeitfelder über praktische Beispiele bis zu Logging und den häufigsten Fehlern.
Was ist Cron?
Cron ist der klassische Zeitplandienst unter Linux. Ein Hintergrunddienst (der „cron daemon“) prüft jede Minute, ob eine geplante Aufgabe fällig ist, und führt sie aus. Die einzelnen Aufträge nennt man Cronjobs. Sie werden in sogenannten crontab-Dateien („cron table“) definiert – pro Benutzer eine eigene.
Die crontab bearbeiten
Deine persönliche crontab bearbeitest du mit crontab -e. Beim ersten Aufruf fragt Linux nach einem Editor (meist nano). Die wichtigsten Befehle:
| Befehl | Wirkung |
|---|---|
crontab -e | Eigene crontab bearbeiten |
crontab -l | Eigene crontab anzeigen |
crontab -r | Eigene crontab löschen (Vorsicht!) |
sudo crontab -e -u benutzer | crontab eines anderen Benutzers bearbeiten |
Die crontab-Syntax verstehen
Jede Zeile in der crontab besteht aus fünf Zeitfeldern und dem auszuführenden Befehl:
# ┌───────── Minute (0-59)
# │ ┌─────── Stunde (0-23)
# │ │ ┌───── Tag des Monats (1-31)
# │ │ │ ┌─── Monat (1-12)
# │ │ │ │ ┌─ Wochentag (0-7, 0 und 7 = Sonntag)
# │ │ │ │ │
# * * * * * auszuführender-befehlDie fünf Felder im Überblick:
| Feld | Bereich | Bedeutung |
|---|---|---|
| 1 | 0–59 | Minute |
| 2 | 0–23 | Stunde |
| 3 | 1–31 | Tag des Monats |
| 4 | 1–12 | Monat |
| 5 | 0–7 | Wochentag (0 und 7 = Sonntag) |
Sonderzeichen
*– jeder Wert (z. B. jede Minute, jede Stunde).,– Aufzählung:0,15,30,45bedeutet zur Minute 0, 15, 30 und 45.-– Bereich:1-5im Wochentagsfeld bedeutet Montag bis Freitag./– Schrittweite:*/10im Minutenfeld bedeutet „alle 10 Minuten“.
Praktische Beispiele
Diese Zeilen zeigen typische Zeitpläne – kopiere sie als Ausgangspunkt in deine crontab:
| Cron-Ausdruck | Bedeutung |
|---|---|
*/5 * * * * | Alle 5 Minuten |
0 * * * * | Jede volle Stunde |
30 2 * * * | Täglich um 02:30 Uhr |
0 3 * * 0 | Jeden Sonntag um 03:00 Uhr |
0 0 1 * * | Am 1. jedes Monats um Mitternacht |
0 9-17 * * 1-5 | Werktags stündlich zwischen 9 und 17 Uhr |
Ein konkreter Job, der täglich um 2:30 Uhr ein Backup-Skript ausführt, sieht so aus:
30 2 * * * /home/user/scripts/backup.shSpezielle Kurzschreibweisen
Statt der fünf Felder kannst du auch praktische Schlüsselwörter verwenden:
| Kürzel | Entspricht |
|---|---|
@reboot | Einmal bei jedem Systemstart |
@hourly | 0 * * * * |
@daily / @midnight | 0 0 * * * |
@weekly | 0 0 * * 0 |
@monthly | 0 0 1 * * |
@yearly | 0 0 1 1 * |
System-Crontab und cron.d
Neben den benutzereigenen crontabs gibt es systemweite Cronjobs. Sie unterscheiden sich in einem wichtigen Punkt: Bei ihnen steht vor dem Befehl zusätzlich der Benutzer, unter dem der Job laufen soll.
/etc/crontab– zentrale System-crontab (mit Benutzerfeld)./etc/cron.d/– Verzeichnis für einzelne Job-Dateien (ideal für Pakete und eigene Skripte)./etc/cron.daily/,cron.weekly/,cron.monthly/– Skripte, die einfach in diese Ordner gelegt werden und entsprechend regelmäßig laufen.
Eine Zeile in /etc/cron.d/mein-job mit Benutzerfeld sieht so aus:
30 2 * * * root /usr/local/bin/mein-skript.shAusgabe und Logging
Standardmäßig verschickt Cron die Ausgabe eines Jobs per lokaler E-Mail an den Benutzer. Praktischer ist es meist, die Ausgabe in eine Logdatei umzuleiten. Mit >> datei 2>&1 landen sowohl normale Ausgabe als auch Fehlermeldungen im Log:
30 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1Möchtest du Benachrichtigungen per Mail an eine bestimmte Adresse senden, setze am Anfang der crontab die Variable MAILTO:
MAILTO="[email protected]"Wann welcher Job vom System gestartet wurde, kannst du zudem im System-Log nachvollziehen:
grep CRON /var/log/syslog
# oder auf systemd-Systemen:
journalctl -u cronHäufige Fehler und wie du sie vermeidest
- Falscher PATH: Cron läuft mit einer minimalen Umgebung. Verwende in Skripten absolute Pfade (z. B.
/usr/bin/phpstatt nurphp) oder setze am Anfang der crontab einePATH-Variable. - Das Prozentzeichen: In crontab-Zeilen hat
%eine Sonderbedeutung (Zeilenumbruch für die Eingabe). Willst du es wörtlich nutzen, maskiere es mit\%. - Skript nicht ausführbar: Stelle sicher, dass dein Skript ausführbar ist (
chmod +x skript.sh) und mit einer Shebang-Zeile wie#!/bin/bashbeginnt. - Fehlende Leerzeile am Ende: Manche cron-Implementierungen verlangen, dass die crontab mit einer leeren Zeile endet.
Tipp: Prüfe die richtige Version deiner Programme vorab – etwa mit unserer Anleitung PHP-Version unter Linux prüfen, bevor du einen PHP-Cronjob einrichtest.
Fazit
Mit crontab automatisierst du wiederkehrende Aufgaben unter Linux zuverlässig. Der Schlüssel ist die Syntax der fünf Zeitfelder – hast du sie einmal verinnerlicht, richtest du jeden Zeitplan in Sekunden ein. Achte auf absolute Pfade und ein sauberes Logging, dann laufen deine Cronjobs stabil im Hintergrund. Ein typischer Anwendungsfall ist das automatische Aufräumen von Docker. Für dauerhaft laufende Dienste ist statt Cron ein systemd-Service die bessere Wahl – und die passenden Bash-Skripte schreibst du so. Wenn du deine Skripte per SSH auf den Server bringst, hilft dir SSH-Key hinterlegen.

