Wiederkehrende Aufgaben mit cron
cron ist der klassische Daemon für wiederkehrende Aufgaben. Er liest
Konfigurationsdateien (Crontabs) und führt Jobs zur definierten Zeit aus.
Auf fast allen Linux-Systemen ist cron vorinstalliert — die verbreiteten
Implementierungen sind crond (RHEL/Fedora), cron (Debian/Ubuntu)
und cronie (viele Distributionen).
systemctl status cron # Debian/Ubuntusystemctl status crond # RHEL/FedoraCrontab-Syntax
Abschnitt betitelt „Crontab-Syntax“Jede Zeile in einer Crontab folgt diesem Schema:
┌───────── Minute (0–59)│ ┌─────── Stunde (0–23)│ │ ┌───── Tag des Monats (1–31)│ │ │ ┌─── Monat (1–12 oder jan–dec)│ │ │ │ ┌─ Wochentag (0–7, 0 und 7 = Sonntag, oder sun–sat)│ │ │ │ │* * * * * BefehlBeispiele
Abschnitt betitelt „Beispiele“# Täglich um 03:00 Uhr0 3 * * * /usr/local/bin/backup.sh
# Jeden Montag um 08:00 Uhr0 8 * * 1 /usr/local/bin/wochenbericht.sh
# Jede Stunde0 * * * * /usr/local/bin/check.sh
# Alle 15 Minuten*/15 * * * * /usr/local/bin/monitor.sh
# Am 1. jeden Monats um 00:000 0 1 * * /usr/local/bin/monatsabschluss.sh
# Montag bis Freitag um 09:000 9 * * 1-5 /usr/local/bin/arbeitstag-start.sh
# Mehrere Werte mit Komma0 6,12,18 * * * /usr/local/bin/dreimal-taeglich.shSonderwerte
Abschnitt betitelt „Sonderwerte“Statt der 5 Felder können auch Kurzformen verwendet werden:
| Kurzform | Bedeutung |
|---|---|
@reboot | Einmalig beim Systemstart |
@hourly | Jede Stunde (0 * * * *) |
@daily | Täglich um Mitternacht (0 0 * * *) |
@weekly | Wöchentlich sonntags (0 0 * * 0) |
@monthly | Monatlich am 1. (0 0 1 * *) |
@yearly | Jährlich am 1. Januar (0 0 1 1 *) |
Benutzer-Crontab
Abschnitt betitelt „Benutzer-Crontab“Jeder Benutzer kann eine eigene Crontab verwalten:
crontab -e # Crontab bearbeiten (öffnet Editor)crontab -l # Crontab anzeigencrontab -r # Crontab löschen (Vorsicht: kein Nachfragen!)crontab -l > backup.txt # Crontab sichernSystem-Crontabs
Abschnitt betitelt „System-Crontabs“Neben Benutzer-Crontabs gibt es systemweite Konfigurationen:
/etc/crontab # systemweite Crontab (hat zusätzliches Benutzer-Feld)/etc/cron.d/ # Verzeichnis für Paket-eigene Crontabs/etc/cron.hourly/ # Skripte, die stündlich ausgeführt werden/etc/cron.daily/ # täglich/etc/cron.weekly/ # wöchentlich/etc/cron.monthly/ # monatlichFormat von /etc/crontab und Dateien in /etc/cron.d/ — mit Benutzerfeld:
# Minute Stunde Tag Monat Wochentag Benutzer Befehl0 3 * * * root /usr/local/bin/backup.sh*/5 * * * * www-data /usr/local/bin/check-web.shSkripte in /etc/cron.daily/ etc. müssen ausführbar sein und dürfen
keine Dateiendung haben (z. B. backup, nicht backup.sh):
sudo cp mein-script.sh /etc/cron.daily/mein-scriptsudo chmod +x /etc/cron.daily/mein-scriptAusgabe und Logging
Abschnitt betitelt „Ausgabe und Logging“Cron sendet die Ausgabe eines Jobs standardmäßig per E-Mail an den ausführenden Benutzer. Auf Servern ohne Mail-Konfiguration landet das im Nirgendwo oder erzeugt Fehler. Besser: Ausgabe explizit umleiten:
# Ausgabe komplett unterdrücken0 3 * * * /usr/local/bin/backup.sh > /dev/null 2>&1
# In Log-Datei schreiben0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
# Nur Fehler loggen0 3 * * * /usr/local/bin/backup.sh > /dev/null 2>> /var/log/backup-errors.logAlternativ: MAILTO in der Crontab setzen:
MAILTO="" # keine MailsMAILTO=admin@example.com # Mails an diese AdresseCron-Aktivitäten im Journal oder Syslog:
journalctl -u crongrep cron /var/log/sysloganacron — verpasste Jobs nachholen
Abschnitt betitelt „anacron — verpasste Jobs nachholen“cron setzt voraus, dass das System zur geplanten Zeit läuft. Auf Laptops und
Desktops ist das oft nicht der Fall. anacron löst dieses Problem:
- Es prüft beim Start, welche täglich/wöchentlich/monatlich fälligen Jobs zuletzt ausgeführt wurden
- Verpasste Jobs werden nachgeholt — mit einer konfigurierbaren Verzögerung nach dem Boot
/etc/anacrontab # anacron-KonfigurationFormat:
# Periode Verzögerung Job-ID Befehl# (Tage) (Minuten)1 5 cron.daily run-parts /etc/cron.daily7 10 cron.weekly run-parts /etc/cron.weekly@monthly 15 cron.monthly run-parts /etc/cron.monthly- Periode: Mindestabstand in Tagen (1 = täglich, 7 = wöchentlich)
- Verzögerung: Wartezeit nach dem Boot in Minuten (verhindert Lastspitzen beim Start)
- Job-ID: Eindeutiger Name, unter dem der letzte Ausführungszeitpunkt gespeichert wird
# Wann wurde ein Job zuletzt ausgeführt?ls -la /var/spool/anacron/
# anacron manuell ausführen (Trockenlauf)anacron -n -d # -n: keine Verzögerung, -d: Debug-AusgabeZugriffssteuerung
Abschnitt betitelt „Zugriffssteuerung“Wie bei at gibt es /etc/cron.allow und /etc/cron.deny — mit identischer Logik:
cron.allow hat Vorrang, cron.deny als Blacklist, ohne beide Dateien darf nur root.