Cronjobs sind geplante Aufgaben, die automatisch zu bestimmten Zeiten ausgeführt werden. Sie sind entscheidend für die Serverwartung, Backups und Anwendungsaufgaben. Bei Theory7 verwenden wir Cronjobs für alles, von täglichen Backups bis hin zu minutengenauer Überwachung. In diesem Handbuch lernst du, wie du Cronjobs korrekt einrichtest und verwaltest.

Was sind Cronjobs?

Ein Cronjob ist ein Unix-Aufgabenplaner, der Befehle oder Skripte zu geplanten Zeitpunkten ausführt. Dies ermöglicht es, routinemäßige Aufgaben zu automatisieren, wodurch du Zeit sparst und die Wahrscheinlichkeit menschlicher Fehler reduzierst. Typische Anwendungen sind:

  • Backups - Tägliche Sicherung von Datenbanken und Dateien, um Datenverlust zu vermeiden.
  • Wartung - Protokolldateien bereinigen und rotieren, um die Serverleistung zu optimieren.
  • E-Mail - Newsletter oder Benachrichtigungen an Benutzer oder Kunden senden.
  • Anwendungen - Bestimmte Aufgaben innerhalb von Frameworks wie WordPress oder Laravel automatisieren.
  • Überwachung - Gesundheitschecks durchführen, um den Status deines Servers oder deiner Anwendungen zu überprüfen.

Crontab bearbeiten

Jeder Benutzer hat eine eigene Crontab. Öffne sie mit:

crontab -e

Dies öffnet deine persönliche Crontab im Standard-Editor. Systemweite Cronjobs befinden sich in:

/etc/crontab
/etc/cron.d/

Cron-Syntax verstehen

Eine Cron-Zeile besteht aus 5 Zeitfeldern plus dem Befehl:

* * * * * befehl
| | | | |
| | | | +-- Wochentag (0-7, 0 und 7 = Sonntag)
| | | +---- Monat (1-12)
| | +------ Tag des Monats (1-31)
| +-------- Stunde (0-23)
+---------- Minute (0-59)

Sonderzeichen

  • * - Jeder Wert
  • , - Mehrere Werte (z.B. 1,3,5)
  • - - Bereich (z.B. 1-5)
  • / - Schritte (z.B. */5 = alle 5 Minuten)

Beispiele erklärt

# Jeden Tag um 03:00
0 3* * * /pfad/zum/script.sh

# Jede Stunde zur vollen Stunde
0 * * * * /pfad/zum/script.sh

# Alle 5 Minuten
*/5* * * * /pfad/zum/script.sh

# An jedem Wochentag um 08:30
30 8* * 1-5 /pfad/zum/script.sh

# Am 1. und 15. eines jeden Monats um Mitternacht
0 0 1,15* * /pfad/zum/script.sh

# Jeden Sonntag um 04:00
0 4* * 0 /pfad/zum/script.sh

Cronjobs erstellen

Beispiel: Datenbanksicherung

crontab -e

# Tägliches MySQL Backup um 03:00
0 3* * * mysqldump -u root -pPASSWORT datenbank > /backups/db_$(date +\%Y\%m\%d).sql

Hinweis: In der Crontab muss % als \% escaped werden, um Syntaxfehler zu vermeiden.

Beispiel: Protokolldatei bereinigen

# Wöchentlich Protokolle älter als 30 Tage löschen (Sonntag 05:00)
0 5 * * 0 find /var/log -name "*.log" -mtime +30 -delete

Beispiel: PHP-Skript ausführen

# Alle 15 Minuten PHP-Cron-Skript*/15 * * * * /usr/bin/php /var/www/site/cron.php

Verwende immer den vollständigen Pfad zur PHP-Executable, um Fehler zu vermeiden.

Cronjobs für Webanwendungen

WordPress WP-Cron

WordPress hat ein eingebautes Cron-System, das bei geringem Verkehr nicht immer zuverlässig ist. Es wird empfohlen, auf echte Cronjobs umzuschalten:

  1. Füge die folgende Zeile zu wp-config.php hinzu:
  2. define('DISABLE_WP_CRON', true);
  3. Erstelle einen Crontab-Eintrag:
  4. */5* * * * /usr/bin/php /var/www/wordpress/wp-cron.php

Laravel Scheduler

Laravel hat einen leistungsstarken Scheduler, der jede Minute laufen muss, um geplante Aufgaben auszuführen:

* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1

Ausgabe und Protokollierung

Ausgabe in Datei

0 3 * * * /pfad/zum/script.sh >> /var/log/mein-cron.log 2>&1
  • >> - An Datei anhängen
  • 2>&1 - Fehler in dieselbe Datei umleiten

Ausgabe per E-Mail

Standardmäßig sendet Cron die Ausgabe an den Benutzer. Um eine spezifische E-Mail einzustellen:

MAILTO=admin@deinedomain.de
0 3* * * /pfad/zum/script.sh

Oder um alle Ausgaben zu unterdrücken:

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

Crontab verwalten

Alle Cronjobs anzeigen

crontab -l

Cronjobs eines anderen Benutzers

sudo crontab -l -u www-data

Crontab löschen

crontab -r

Hinweis: Dies löscht ALLE Cronjobs dieses Benutzers, sei also vorsichtig.

Cron-Logs anzeigen

Überprüfe, ob Cronjobs laufen, indem du die Logs ansiehst:

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

# CentOS/RHEL
tail -f /var/log/cron

Häufige Fehler

Skript funktioniert manuell, nicht als Cron

Umgebungsvariablen sind in Cron anders. Verwende immer vollständige Pfade:

# Fehler
0 3* * * script.sh

# Gut
0 3 * * * /usr/local/bin/script.sh

PATH in Crontab festlegen

Wenn du auf bestimmte Befehle angewiesen bist, lege den PATH fest:

PATH=/usr/local/bin:/usr/bin:/bin
0 3* * * script.sh

Berechtigungen

Stelle sicher, dass Skripte ausführbar sind:

chmod +x /pfad/zum/script.sh

Verwandte Artikel

Mehr Informationen zu VPS-Servern bei Theory7

Brauchst du Hilfe?

Wir sind für dich da! Hast du Fragen oder stößt du auf Probleme? Unser Support-Team hilft dir gerne persönlich weiter. Schicke uns eine Nachricht über das Ticketsystem - wir antworten normalerweise innerhalb weniger Stunden und denken gerne mit dir mit.