⏰ cron · crontab · Zeitpläne

Zeitgesteuerte Jobs visuell erklärt

Eine Zeile wie 30 4 * * 1 backup.sh reicht, damit ein Server jeden Montag um 04:30 ein Backup macht. Hier siehst du, wie cron diese Zeile liest, wann sie wirklich feuert (auch bei der Zeitumstellung) und was der Daemon dann tut.

│  │ │ │ │
│  │ │ │ └── Wochentag   0–7 (0 und 7 = Sonntag) · sun–sat
│  │ │ └──── Monat       1–12 · jan–dec
│  │ └────── Tag         1–31
│  └──────── Stunde      0–23
└─────────── Minute      0–59
Minute · erlaubt 0–59
„30“ bedeutet hier: zur Minute 30
Jeden Montag um 04:30
Nächste Läufe (Europe/Berlin): …
🔤
Syntax

Fünf Felder, Listen, Bereiche, Schritte, Namen, @-Strings – und die ODER-Regel für Tag und Wochentag, belegt aus man 5 crontab.

🛠️
Cron-Editor

Ausdruck tippen oder zusammenklicken → deutscher Klartext, nächste Ausführungen in jeder Zeitzone, Monatskalender und Heatmap.

🐞
Schritt-Debugger

crond Minute für Minute: Feldvergleich, fork, minimale Umgebung, /bin/sh -c, stdout/stderr, Mail und Exit-Code.

⚠️
Stolperfallen

PATH, das %-Zeichen, Sommerzeit (02:30 fehlt oder kommt doppelt), überlappende Läufe mit flock, Logging, /etc/cron.d, anacron.

🔀
Alternativen

systemd-Timer mit OnCalendar-Umrechnung, Kubernetes CronJob, Docker, GitHub Actions, node-cron, APScheduler, BullMQ.

🔁 Die Schleife von crond

        ┌──────────────────────────────────────────┐
        │  sleep() bis zur nächsten vollen Minute   │◄─────┐
        └──────────────────────┬───────────────────┘      │
                               ▼                          │
        ┌──────────────────────────────────────────┐      │
        │  crontabs geändert (mtime)? → neu laden   │      │
        └──────────────────────┬───────────────────┘      │
                               ▼                          │
        ┌──────────────────────────────────────────┐      │
        │  für jede Zeile:  Minute ∧ Stunde ∧ Monat │      │
        │          ∧ (Tag ∘ Wochentag)  passt?      │      │
        └───────────┬──────────────────┬───────────┘      │
                 ja │                  │ nein             │
                    ▼                  └──────────────────┤
        ┌──────────────────────────┐                      │
        │ fork → setuid → /bin/sh -c│── Ausgabe → Mail ───┘
        └──────────────────────────┘
💡 Wo liegen crontabs?
Benutzer-crontabs bearbeitet man mit crontab -e (Debian speichert sie unter /var/spool/cron/crontabs/). Systemweite Jobs stehen in /etc/crontab und /etc/cron.d/* – dort mit zusätzlichem Benutzerfeld.
⚠️ Drei Klassiker, die jeder einmal erlebt
1) Das Skript läuft im Terminal, aber nicht per cron → PATH ist in cron nur /usr/bin:/bin. 2) date +%F in der crontab → das % beendet den Befehl. 3) Ein Job um 02:30 → an einem Tag im März fehlt die Uhrzeit, im Oktober gibt es sie zweimal.
✅ Alles echt gerechnet
Nächste Ausführungen, Kalender und Zeitumstellungen berechnet die App selbst (mit der Zeitzonen-Datenbank deines Browsers). Die systemd-Umrechnung wurde gegen systemd-analyze calendar geprüft.