Kurze Antwort
Ein Cron-Job wird meist wegen falscher Syntax in der Crontab, fehlender Ausführungsberechtigung, falschem Pfad zum Skript oder weil der Cron-Dienst nicht läuft, nicht ausgeführt. Prüfen Sie die Logs, testen Sie das Skript manuell und verwenden Sie absolute Pfade.
So erkennen Sie das Problem
- Der Job startet nicht zur geplanten Zeit
- Keine erwartete Ausgabe oder Datei
- Cron-Log ist leer oder zeigt Fehler
- Skript funktioniert manuell, aber nicht über Cron
- E-Mail-Benachrichtigungen über Fehler kommen nicht an
Häufigste Ursachen
Cron-Dienst nicht gestartet
Wenn der Cron-Daemon nicht aktiv ist, wird kein Job ausgeführt. Prüfen Sie den Dienststatus und starten Sie ihn bei Bedarf.
Falsche Syntax in der Crontab
Ein Fehler in den Zeitfeldern oder eine fehlende abschließende Zeile kann die Ausführung verhindern. Prüfen Sie das Format und verwenden Sie `crontab -l`, um aktive Jobs anzuzeigen.
Fehlende Ausführungsberechtigung
Das Skript muss die Ausführungsberechtigung haben (`chmod +x`). Prüfen Sie außerdem, ob der Besitzer der Benutzer ist, der Cron ausführt.
Falscher Pfad oder Umgebung
Cron verwendet eine eingeschränkte Umgebung, daher können relative Pfade und Variablen problematisch sein. Verwenden Sie absolute Pfade und definieren Sie Variablen explizit.
Probleme mit Berechtigungen oder Besitzverhältnissen
Dateien, auf die das Skript zugreift, müssen für den Cron-Benutzer lesbar sein. Prüfen Sie Berechtigungen und Besitzverhältnisse von Dateien und Verzeichnissen.
Lösung Schritt für Schritt
- 1
Prüfen Sie, ob der Cron-Dienst läuft
Führen Sie
systemctl status cronaus (odersystemctl status crondauf einigen Distributionen). Wenn der Dienst nicht aktiv ist, starten Sie ihn mitsudo systemctl start cronund aktivieren Sie den automatischen Start mitsudo systemctl enable cron. - 2
Überprüfen Sie aktive Cron-Jobs
Führen Sie
crontab -laus, um die Jobs für den aktuellen Benutzer anzuzeigen. Für Systemjobs sehen Sie in die Datei/etc/crontabund das Verzeichnis/etc/cron.d/. Stellen Sie sicher, dass keine Syntaxfehler vorhanden sind. - 3
Testen Sie das Skript manuell
Führen Sie das Skript im Terminal mit demselben Benutzer aus, der Cron ausführt. Wenn es manuell nicht funktioniert, liegt das Problem im Skript, nicht in Cron. Beheben Sie die Fehler und testen Sie erneut.
- 4
Verwenden Sie absolute Pfade
Geben Sie in der Crontab den vollständigen Pfad zum Skript und Interpreter an, z. B.
/usr/bin/python3 /home/benutzer/skript.py. Dasselbe gilt für Dateien, auf die das Skript zugreift. - 5
Legen Sie Umgebungsvariablen fest
Fügen Sie am Anfang der Crontab
PATH=/usr/bin:/binund andere benötigte Variablen hinzu. Sie können sie auch innerhalb des Skripts definieren. Vermeiden Sie die Abhängigkeit von Variablen aus einer interaktiven Sitzung. - 6
Prüfen Sie Berechtigungen und Besitzverhältnisse
Stellen Sie sicher, dass das Skript die Ausführungsberechtigung hat (
chmod +x skript.sh) und dass der Benutzer, der Cron ausführt, es lesen und ausführen darf. Prüfen Sie auch die Berechtigungen der Verzeichnisse und Dateien, die das Skript verwendet. - 7
Überprüfen Sie die Cron-Logs
Auf Systemen mit systemd-journald verwenden Sie
journalctl -u cronoderjournalctl -u crond. Auf anderen Systemen sehen Sie in/var/log/syslogoder/var/log/cron. Suchen Sie nach Fehlern im Zusammenhang mit Ihrem Job. - 8
Leiten Sie die Ausgabe vorübergehend in eine Datei um
Fügen Sie
>> /tmp/cron.log 2>&1am Ende der Zeile in der Crontab hinzu, um die Standardausgabe und Fehler zu erfassen. Überprüfen Sie dann die Datei, nachdem der Job ausgeführt wurde. - 9
Prüfen Sie, ob die Zeit korrekt ist
Stellen Sie sicher, dass die Systemzeit korrekt ist (
date). Wenn die Zeitzone falsch ist, wird Cron zur falschen Zeit ausgeführt. Stellen Sie die Zeitzone und die Zeitsynchronisierung ein.
Wenn nichts hilft
Wenn Sie alles oben Genannte überprüft haben und der Job immer noch nicht ausgeführt wird, versuchen Sie, Cron im Debug-Modus zu starten. Bei Vixie Cron stoppen Sie vorübergehend den Dienst und starten ihn manuell mit sudo cron -f -x proc (oder der entsprechenden Option für Ihren Cron); starten Sie den Dienst nach dem Test neu. Dadurch werden detaillierte Informationen zur Verarbeitung der Jobs angezeigt. Prüfen Sie außerdem, ob Einschränkungen durch die Dateien /etc/cron.allow und /etc/cron.deny bestehen, die den Benutzer daran hindern könnten, Cron zu verwenden. Ziehen Sie schließlich eine Alternative wie systemd-Timer in Betracht, der besseres Logging und Verwaltung bietet.
So beugen Sie vor
- Überprüfen Sie regelmäßig die Cron-Logs
- Verwenden Sie absolute Pfade und explizite Variablen
- Testen Sie Skripte, bevor Sie sie zu Cron hinzufügen
- Beschränken Sie Berechtigungen und überwachen Sie Dateibesitzverhältnisse
Wann Sie einen Profi rufen sollten
Wenn Sie die Ursache nicht finden können oder keinen Zugriff auf Logs und Systemdateien haben, wenden Sie sich an den IT-Support. Dieser kann das Problem schneller isolieren und Betriebsunterbrechungen vermeiden.
IT-Infrastruktur-Wartung · Server, Netzwerke, Backup, Sicherheit und HelpdeskHäufige Fragen
Warum wird mein Cron-Job nicht ausgeführt, obwohl die Syntax korrekt ist?
Der häufigste Grund ist eine fehlende Ausführungsberechtigung für das Skript oder ein falscher Pfad zum Interpreter. Prüfen Sie, ob das Skript bei manueller Ausführung funktioniert und ob alle Pfade absolut sind.
Wie sehe ich Fehler, die Cron meldet?
Sie können die Ausgabe vorübergehend in eine Datei umleiten, indem Sie `>> /tmp/cron.log 2>&1` in die Crontab einfügen. Überprüfen Sie auch die Systemlogs wie `/var/log/syslog` oder `journalctl -u cron`.
Ist Cron dasselbe wie Anacron?
Nein. Cron ist für präzise Zeitplanung gedacht, führt aber verpasste Jobs nicht aus, wenn der Computer ausgeschaltet war. Anacron wurde entwickelt, um verpasste Jobs auszuführen, garantiert aber keine genaue Zeit.