Cron-errorbehebung: Por qué Ihre Jobs no laufen

Cron-Jobs, la stillschweigend fehlschlagen, son frustrierend y häufig. Dieser systematische errorbehebungsleitfaden führt a través de la häufigsten problemae y ihre soluciónen y hilft Ihnen, Ihre geplanten Jobs zuverlässig al Laufen a bringen.

Zuerst la Grundlagen verificar

Bevor en complejoes Debugging eintauchen, verificar la Grundlagen. muchos Cron-problemae stammen de simpleen Übersehen, la leicht a verificar sind.

Bestätigen zuerst, que Ihre Crontab tatsächlich geguarda wurde. Nach el Bearbeitung con "crontab -e" verificar sie con "crontab -l", para Ihre Crontab aufzulisten. Wenn Ihre Einträge no erscheinen, fueron sie no geguarda. Häufige Ursachen: Editor sin guardar geschlossen, incorrectoes Benutzerkonto (Crontab es pro Benutzer) o sintaxisfehler, la dazu führen, que la Crontab abgelehnt wird.

Überverificar Sie, que el Cron-Daemon läuft. Auf el meisten Linux-sistemaen usar "systemctl status cron" o "systemctl status crond" (der Daemon-Name variiert je después de Distribution). Wenn Cron no läuft, pueden Ihre Jobs no ausgeführt werden. inicioen ihn con "systemctl start cron" o "service cron start".

Überverificar Sie, que Ihre Cron-sintaxis gültig ist. Verwenden unseren Crontab-Generador, para Ihren Ausdruck a validar y a sehen, wann er laufen würde. Ein simpleer Tippfehler wie "0 0 * * 8" (es no hayn Tag 8) o "60 0 * * *" (Minute 60 existiert nicht) verursacht stillschweigende error. Der Cron-Daemon meldet sintaxisfehler oft no klar.

Überverificar sistemaprotokolle en Cron-Ausführung. Auf systemd-sistemaen usar "journalctl -u cron" o "journalctl -u crond". Auf älteren sistemaen verificar /var/log/syslog o /var/log/cron. Diese protocoloe zeigen, wann Cron Jobs inicia, selbst si el Job selbst fehlschlägt. Wenn no sehen, que Ihr Job inicia, liegt el problema en el Cron-Planung. Wenn sehen, que er inicia, pero fehlschlägt, liegt el problema en Ihrem comando.

Bestätigen Sie, que la correctoe Crontab del Benutzers editar. Cron-Jobs laufen como el Benutzer, el la Crontab gehört. Wenn Root-permisoen benötigen, usar "sudo crontab -e", para la Crontab de Root a editar, no la Crontab Ihres Benutzers. "crontab -e" como regulärer Benutzer auszuführen y dann a verbuscar, comandoe auszuführen, la Root-Privilegien erfordern, será con permisosfehlern fehlschlagen.

Stellen sicher, que Ihr comando existiert y ausführbar ist. Führen de a un Terminal desde el genauen comando desde Ihrer Crontab manuell aus. Wenn er interaktiv fehlschlägt, será er definitiv en Cron fehlschlagen. Wenn er interaktiv erfolgreich ist, pero en Cron fehlschlägt, liegt el problema wahrscheinlich en Umgebungsunterschieden (als nächstes behandelt).

Umgebungs- y Pfadprobleme

Der häufigste Grund, warum Cron-Jobs fehlschlagen, son Umgebungsunterschiede entre Ihrer interaktiven Shell y el minimalen Umgebung de Cron. Wenn comandoe de Ihrem Terminal ejecutar, ofrece Ihre Shell umfangreiche Einrichtung: PATH con Orten al Finden de Executables, Umgebungsvariablen desde .bashrc o .profile, Arbeitsverzeichnis en Ihr Home- o Projektverzeichnis gesetzt y Sprach-/Locale-configuraciónen. Cron ofrece fast nichts davon.

Der PATH de Cron es typischerweise solo "/usr/bin:/bin", was significa, que es solo Executables en diesen beiden Verzeichnissen encontrar kann. Wenn Ihr script en /home/user/bin ist, será Cron es no encontrar. Wenn Ihr Job "python" utiliza y python en /usr/local/bin o de una virtualenv ist, puede Cron es no encontrar. Verwenden immer absolute Pfade: "/usr/bin/python3" statt "python3", "/home/user/scripts/backup.sh" statt "backup.sh".

Umgebungsvariablen, en la sich verlassen, existieren en Cron nicht. DATABASE_URL, API_KEYS, AWS-Anmeldeinformationen y andere variablen desde Ihrer .bashrc son no verfügbar. Setzen sie explizit en el Crontab selbst (oben, antes de Jobzeilen: "DATABASE_URL=...") o en Ihrem script. antiguoernativ sourcen Ihre Umgebungsdatei: ". /home/user/.env && /home/user/script.sh".

Das Arbeitsverzeichnis es en Cron unvorhersehbar - oft el Home-Verzeichnis del Benutzers, pero no garantiert. Wenn Ihr script "open('config.json')" macht y una lokale archivo erwartet, será es fehlschlagen, si es desde a un anderen Verzeichnis ausgeführt wird. Verwenden absolute Pfade para alle archivooperationen o wechseln explizit en el necesitae Verzeichnis: "cd /home/user/project && ./script.sh".

Um Umgebungsprobleme a depurar, crear un prueba-Cron-Job, el la Umgebung ausgibt: "* * * * * env > /tmp/cron-env.txt". Lassen ihn laufen, warten una Minute y examinar dann /tmp/cron-env.txt, para genau a sehen, welche Umgebung Cron bereitstellt. Vergleichen dies con "env" en Ihrer interaktiven Shell, para a sehen, was fehlt.

Für Python-Projekte activar virtualenvs explizit: "*/5 * * * * cd /path/to/project && /path/to/venv/bin/python script.py". Das Python-Binary el virtualenv contiene la Umgebungs-Einrichtung. Ähnlich para Node.js, Ruby o andere sprachspezifische Umgebungen.

Locale-problemae verursachen subtile Bugs. Cron podría con "POSIX" Locale laufen, mientras Ihre Entwicklungsumgebung "en_US.UTF-8" utiliza. Dies beeinflusst String-Sortierung, Datums-Parsing y carácterkodierung. Setzen Locale explizit, si nötig: "LC_ALL=en_US.UTF-8 /path/to/script".

Erwägen Sie, un Wrapper-script a crear, el la Umgebung konsistent einrichtet y dann Ihr tatsächliches script aufruft. Der Wrapper sourct Umgebungsdateien, setzt PATH, wechselt en el correctoe Verzeichnis y handhabt gemeinsame Einrichtung. Dies zentralisiert la Umgebungskonfiguration, anstatt sie en jedem Crontab-Eintrag a wiederholen.

protocoloierung y salida

Cron-Job-error son schwer a depurar sin salida. estándarmäßig envía Cron comandosausgabe y error per E-Mail an el Benutzer, pero la meisten modernen sistemae han keine lokale E-Mail configura, also verschwindet diese salida. Explizite protocoloierung löst dies.

Leiten stdout y stderr en una protocolodatei um: "0 2 * * * /path/to/script.sh > /var/log/myjob.log 2>&1". Das "> /var/log/myjob.log" leitet estándarausgabe (stdout) en la archivo um. Das "2>&1" leitet estándarfehler (stderr) dorthin um, wohin stdout geht (die protocolodatei). Jetzt geht alle salida, einschließlich errormeldungen, en una archivo, la examinar können, si Ihr Job fehlschlägt.

Anhängen statt Überescribir, para una Historie aufzubauen: "0 2 * * * /path/to/script.sh >> /var/log/myjob.log 2>&1". Das ">>" hängt an la archivo an, anstatt sie a reemplazar. Jeder Lauf fügt al protocolo hinzu y erstellt una Historie. Achten en protocolodatei-Wachstum - implementieren Log-Rotation o periodisches Aufräumen.

Fügen Zeitstempel hinzu, para Läufe a unterscheiden: In Ihrem script usar "date", para auszugeben, wann es läuft. Oder usar una protocoloierungsbibliothek, la Einträge automatisch con Zeitstempeln versieht. Ohne Zeitstempel es es schwer a sagen, welche protocoloeinträge de welcher Ausführung stammen.

Log-Rotation verhindert unbegrenztes Wachstum. Verwenden logrotate, para antiguoe protocoloe automatisch a archivieren, a komprimieren y a eliminar. crear /etc/logrotate.d/myjob con configuración, para Ihre Cron-Job-protocoloe wöchentlich o si sie una bestimmte Größe erreichen a rotieren.

Für kritische Jobs erwägen sowohl protocoloierung en una archivo como también Alarmierung en error. Erfassen salida en un protocolo y verificar dann el Exit-código: "0 2 * * * /path/to/script.sh >> /var/log/myjob.log 2>&1 || echo 'Job fehlgeschlagen' | mail -s 'Cron-error' [email protected]". Das "||" significa "oder" - si el script fehlschlägt (Exit-código ungleich Null), enviar una E-Mail.

Trennen stdout y stderr, si normale salida de errorn unterscheiden müssen: "0 2 * * * /path/to/script.sh >> /var/log/myjob.out 2>> /var/log/myjob.err". Jetzt geht normale salida después de .out y error después de .err.

Zum pruebaen usar un kurzes Intervall (alle 2 Minuten) y verificar protocoloe häufig: "*/2 * * * * /path/to/script.sh >> /tmp/test.log 2>&1". Sobald es funciona, cambiar en el Produktionszeitplan y mover protocoloe an el correctoen Ort.

Denken daran, que Cron sin Umleitung versucht, salida per E-Mail a enviar. Wenn Ihr sistema lokal E-Mail genera (verificar /var/mail/benutzername), könnten salida dort encontrar. Aber explizite protocoloierung es zuverlässiger como sich en lokale E-Mail a verlassen.

Probar la Herramienta

Crontab Generator

Crontab Generator

Artículos Relacionados