Oft werden crontab
-Skripte nicht planmäßig oder wie erwartet ausgeführt. Dafür gibt es zahlreiche Gründe:
Dieses Community-Wiki soll die wichtigsten Gründe dafür zusammenfassen, dass crontab
-Skripte nicht wie erwartet ausgeführt werden. Schreiben Sie jeden Grund in eine separate Antwort.
Bitte geben Sie einen Grund pro Antwort an - Details darüber, warum es nicht ausgeführt wird - und die Lösung(en) für diesen einen Grund.
Bitte schreiben Sie nur cron-spezifische Probleme, z.B. Befehle, die von der Shell wie erwartet ausgeführt werden, aber von cron fehlerhaft ausgeführt werden.
Mein größtes Problem: Wenn Sie vergessen, am Ende der Datei crontab
einen Zeilenumbruch einzufügen. Mit anderen Worten: Die crontab-Datei sollte mit einer Leerzeile enden.
Unten ist der relevante Abschnitt in den man-Seiten für dieses Problem (man crontab
dann zum Ende springen):
Although cron requires that each entry in a crontab end in a newline
character, neither the crontab command nor the cron daemon will detect
this error. Instead, the crontab will appear to load normally. However,
the command will never run. The best choice is to ensure that your
crontab has a blank line at the end.
4th Berkeley Distribution 29 December 1993 CRONTAB(1)
Für Skripte sollte ein absoluter Pfad verwendet werden:
Zum Beispiel sollte /bin/grep
anstelle von grep
verwendet werden:
# m h dom mon dow command
0 0 * * * /bin/grep ERROR /home/adam/run.log &> /tmp/errors
Anstelle von:
# m h dom mon dow command
0 0 * * * grep ERROR /home/adam/run.log &> /tmp/errors
Dies ist besonders knifflig, weil derselbe Befehl auch funktioniert, wenn er von der Shell aus ausgeführt wird. Der Grund dafür ist, dass cron
nicht die gleiche PATH
-Umgebungsvariable hat wie der Benutzer.
Cron ruft ein Skript auf, das nicht ausführbar ist.
Durch Ausführen von chmod +x /path/to/scrip
wird das Skript ausführbar und sollte dieses Problem beheben.