Cron ist der Aufgabenplaner von Linux. Ob Backups, Updates oder eigene Skripte - mit Cron führen Sie Aufgaben automatisch zu festgelegten Zeiten aus.

Was ist Cron?

Cron ist ein Daemon (Hintergrunddienst), der Jobs nach einem Zeitplan ausführt. Die Jobs werden in der "Crontab" (Cron Table) definiert.

Crontab bearbeiten

Eigene Crontab öffnen

crontab -e

Beim ersten Aufruf wählen Sie einen Editor (nano empfohlen für Einsteiger).

Crontab anzeigen

crontab -l

Crontab löschen

crontab -r

Crontab eines anderen Benutzers

crontab -u www-data -e    # Bearbeiten
crontab -u www-data -l    # Anzeigen

Cron-Syntax

Jede Zeile in der Crontab folgt diesem Format:

* * * * * Befehl
│ │ │ │ │
│ │ │ │ └── Wochentag (0-7, 0 und 7 = Sonntag)
│ │ │ └──── Monat (1-12)
│ │ └────── Tag (1-31)
│ └──────── Stunde (0-23)
└────────── Minute (0-59)

Sonderzeichen

  • * - Jeder Wert
  • , - Liste von Werten (1,3,5)
  • - - Bereich (1-5)
  • / - Schritte (*/15 = alle 15)

Praktische Beispiele

Jede Minute

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

Täglich um 3:00 Uhr

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

Jeden Montag um 9:00 Uhr

0 9 * * 1 /pfad/zum/report.sh

Alle 15 Minuten

*/15 * * * * /pfad/zum/check.sh

Am 1. jeden Monats um 4:00 Uhr

0 4 1 * * /pfad/zum/monatsbackup.sh

Werktags um 8:00 Uhr

0 8 * * 1-5 /pfad/zum/skript.sh

Mehrmals täglich

0 8,12,18 * * * /pfad/zum/skript.sh

Spezielle Zeitangaben

Statt der 5-Felder-Syntax können Sie Schlüsselwörter verwenden:

@reboot     /pfad/zum/startup.sh      # Bei Systemstart
@yearly     /pfad/zum/skript.sh       # Jährlich (1.1. 0:00)
@monthly    /pfad/zum/skript.sh       # Monatlich (1. 0:00)
@weekly     /pfad/zum/skript.sh       # Wöchentlich (So 0:00)
@daily      /pfad/zum/skript.sh       # Täglich (0:00)
@hourly     /pfad/zum/skript.sh       # Stündlich

Output und Logging

Output per E-Mail

Standardmäßig sendet Cron die Ausgabe per E-Mail. Definieren Sie den Empfänger:

MAILTO=admin@example.com
0 3 * * * /pfad/zum/backup.sh

Output unterdrücken

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

Output in Datei loggen

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

Mit Timestamp loggen

0 3 * * * /pfad/zum/skript.sh >> /var/log/mein-skript.log 2>&1 && echo "[$(date)] Job ausgeführt" >> /var/log/mein-skript.log

Umgebungsvariablen

Cron läuft mit eingeschränkter Umgebung. Pfade und Variablen müssen explizit gesetzt werden:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash

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

System-Cron-Verzeichnisse

Neben der Benutzer-Crontab gibt es System-Verzeichnisse:

  • /etc/cron.d/ - Crontab-Dateien für Pakete
  • /etc/cron.hourly/ - Skripte stündlich ausführen
  • /etc/cron.daily/ - Skripte täglich ausführen
  • /etc/cron.weekly/ - Skripte wöchentlich ausführen
  • /etc/cron.monthly/ - Skripte monatlich ausführen

Beispiel: Tägliches Skript

nano /etc/cron.daily/mein-backup

Inhalt:

#!/bin/bash
/pfad/zum/backup.sh

Ausführbar machen:

chmod +x /etc/cron.daily/mein-backup

Praxisbeispiele

Tägliches Datenbank-Backup

0 2 * * * mysqldump -u backup -p'passwort' --all-databases | gzip > /backup/db-$(date +\%Y\%m\%d).sql.gz

Wichtig: % muss als \% escaped werden in der Crontab!

Alte Logs löschen

0 4 * * * find /var/log -name "*.log" -mtime +30 -delete

Let's Encrypt erneuern

0 3 * * 1 certbot renew --quiet

System-Updates (vorsichtig!)

0 4 * * 0 apt update && apt upgrade -y >> /var/log/apt-upgrade.log 2>&1

Festplattenplatz prüfen

0 */4 * * * df -h | mail -s "Festplattenplatz $(hostname)" admin@example.com

Cron testen

Skript manuell ausführen

Testen Sie Ihr Skript erst manuell:

/pfad/zum/skript.sh

Cron-Umgebung simulieren

env -i /bin/bash --noprofile --norc -c '/pfad/zum/skript.sh'

Häufig testen, dann reduzieren

# Zum Testen: jede Minute
* * * * * /pfad/zum/skript.sh >> /tmp/cron-test.log 2>&1

# Nach erfolgreichem Test: richtige Zeit
0 3 * * * /pfad/zum/skript.sh

Cron-Logs prüfen

# Debian/Ubuntu
grep CRON /var/log/syslog

# Live verfolgen
tail -f /var/log/syslog | grep CRON

Häufige Fehler

Skript wird nicht ausgeführt

1. Rechte prüfen: chmod +x /pfad/zum/skript.sh 2. Pfad vollständig: Immer absolute Pfade verwenden 3. Shebang vorhanden: #!/bin/bash am Anfang 4. Cron-Syntax prüfen: Online-Tools wie crontab.guru

Skript läuft manuell, aber nicht per Cron

  • PATH-Variable setzen
  • Absolute Pfade verwenden
  • Umgebungsvariablen explizit definieren

Timing-Probleme

  • Serverzeit prüfen: date
  • Timezone prüfen: timedatectl
  • Cron läuft in UTC? Prüfen Sie die System-Timezone

Online-Tools

Fazit

Cron ist unverzichtbar für Server-Administration. Die Syntax ist anfangs gewöhnungsbedürftig, aber mit crontab.guru schnell gemeistert. Wichtig: Immer mit Logging testen, absolute Pfade verwenden, und die Cron-Umgebung beachten.