78 Dokumentationen verfügbar

Wissensdatenbank

Cronjobs Linux Einrichten Anleitung

Zuletzt aktualisiert: 11.01.2026 um 10:22 Uhr

Cronjobs unter Linux einrichten

Cronjobs ermöglichen es, Aufgaben automatisch zu bestimmten Zeiten auszuführen - von täglichen Backups über Log-Rotation bis zu regelmäßigen Datenbank-Optimierungen. Diese Anleitung erklärt die Crontab-Syntax und zeigt praktische Beispiele.

Was ist Cron?

Cron ist ein zeitbasierter Job-Scheduler in Unix-ähnlichen Betriebssystemen. Er führt Befehle oder Skripte zu festgelegten Zeiten automatisch aus.

  • Cron: Der Daemon (Hintergrunddienst), der Jobs ausführt
  • Crontab: Die Tabelle mit den geplanten Aufgaben
  • Cronjob: Eine einzelne geplante Aufgabe

Crontab-Befehle

# Eigene Crontab bearbeiten
crontab -e

# Eigene Crontab anzeigen
crontab -l

# Eigene Crontab löschen
crontab -r

# Crontab eines anderen Benutzers bearbeiten (als root)
crontab -u username -e

Die Crontab-Syntax

Jede Zeile in der Crontab folgt diesem Format:

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

Sonderzeichen

Zeichen Bedeutung Beispiel
* Jeder Wert * * * * * = jede Minute
, Mehrere Werte 0,30 * * * * = zur vollen und halben Stunde
- Wertebereich 0 9-17 * * * = stündlich von 9-17 Uhr
/ Schrittweite */15 * * * * = alle 15 Minuten

Praktische Beispiele

Zeitbasierte Jobs

# Jeden Tag um 3:00 Uhr nachts
0 3 * * * /home/user/backup.sh

# Jeden Montag um 6:00 Uhr
0 6 * * 1 /home/user/weekly-report.sh

# Am 1. jeden Monats um Mitternacht
0 0 1 * * /home/user/monthly-cleanup.sh

# Alle 5 Minuten
*/5 * * * * /home/user/check-status.sh

# Alle 2 Stunden
0 */2 * * * /home/user/sync-data.sh

# Werktags um 8:30 Uhr (Mo-Fr)
30 8 * * 1-5 /home/user/workday-task.sh

# Nur im Januar und Juli, täglich um 12:00
0 12 * 1,7 * /home/user/biannual-report.sh

Häufige Anwendungsfälle

# Tägliches Datenbank-Backup um 2:00 Uhr
0 2 * * * mysqldump -u root -p'password' database > /backup/db_$(date +\%Y\%m\%d).sql

# WordPress Cronjobs (alle 15 Minuten)
*/15 * * * * cd /var/www/html && php wp-cron.php > /dev/null 2>&1

# Log-Dateien täglich rotieren
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf

# SSL-Zertifikat erneuern (2x täglich prüfen)
0 0,12 * * * certbot renew --quiet

# Alte Dateien löschen (älter als 30 Tage)
0 4 * * * find /tmp -type f -mtime +30 -delete

# Server-Status per E-Mail
0 8 * * * /usr/bin/df -h | mail -s "Disk Report" admin@example.com

Vordefinierte Zeitangaben

Viele Cron-Implementierungen unterstützen spezielle Strings:

@reboot     # Einmal beim Systemstart
@yearly     # Einmal pro Jahr (0 0 1 1 *)
@annually   # Wie @yearly
@monthly    # Einmal pro Monat (0 0 1 * *)
@weekly     # Einmal pro Woche (0 0 * * 0)
@daily      # Einmal pro Tag (0 0 * * *)
@midnight   # Wie @daily
@hourly     # Einmal pro Stunde (0 * * * *)

# Beispiele
@daily /home/user/daily-backup.sh
@reboot /home/user/startup-script.sh

Ausgabe und Logging

Ausgabe in Datei umleiten

# Stdout und Stderr in Datei
0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1

# Nur Stderr in Datei
0 3 * * * /home/user/backup.sh 2>> /var/log/backup-errors.log

# Ausgabe komplett unterdrücken
0 3 * * * /home/user/backup.sh > /dev/null 2>&1

E-Mail-Benachrichtigung

# Am Anfang der Crontab
MAILTO="admin@example.com"

# Für einzelne Jobs deaktivieren
0 3 * * * /home/user/backup.sh > /dev/null 2>&1

Umgebungsvariablen

Cronjobs laufen mit einer eingeschränkten Umgebung:

# Am Anfang der Crontab definieren
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/home/user

# Oder im Skript selbst
#!/bin/bash
source /home/user/.bashrc
export PATH=/usr/local/bin:$PATH

# Dann der eigentliche Befehl
...
💡 Tipp: Verwenden Sie in Cronjobs immer absolute Pfade für Befehle und Dateien!

Cronjobs debuggen

Cron-Log prüfen

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

# CentOS/RHEL
cat /var/log/cron

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

Häufige Probleme

Problem Lösung
Skript läuft manuell, aber nicht via Cron PATH-Variable prüfen, absolute Pfade verwenden
Keine Ausgabe/Fehler sichtbar Ausgabe in Log-Datei umleiten
Berechtigungsfehler Skript ausführbar machen: chmod +x script.sh
Job läuft zur falschen Zeit Zeitzone prüfen: timedatectl

System-Crontabs

Neben Benutzer-Crontabs gibt es systemweite Konfigurationen:

# System-Crontab
/etc/crontab

# Verzeichnisse für periodische Jobs
/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/

# Benutzerdefinierte Crontabs
/etc/cron.d/

Alternativen zu Cron

  • systemd Timer: Moderner, mehr Funktionen, besseres Logging
  • Anacron: Für Systeme, die nicht 24/7 laufen
  • at: Für einmalige, zeitgesteuerte Jobs

Weitere Hilfe