Spesso, gli script crontab
non vengono eseguiti nei tempi previsti o come previsto. Ci sono numerose ragioni per questo:
Questo wiki della comunità mira ad aggregare le ragioni principali per cui gli script crontab
non vengono eseguiti come previsto. Scrivi ogni motivo in una risposta separata.
Si prega di includere una ragione per ogni risposta - dettagli sul perché non viene eseguito - e correzioni per quella ragione.
Si prega di scrivere solo i problemi specifici di cron, ad esempio i comandi che vengono eseguiti come previsto dalla shell ma eseguiti erroneamente da cron.
Il mio problema principale: se si dimentica di aggiungere una newline alla fine del file crontab
. In altre parole, il file crontab dovrebbe finire con una linea vuota.
Qui sotto c'è la sezione rilevante nelle pagine man per questo problema (man crontab
poi salta alla fine):
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)
Il percorso assoluto dovrebbe essere usato per gli script:
Per esempio, /bin/grep
dovrebbe essere usato al posto di grep
:
# m h dom mon dow command
0 0 * * * /bin/grep ERROR /home/adam/run.log &> /tmp/errors
Invece di:
# m h dom mon dow command
0 0 * * * grep ERROR /home/adam/run.log &> /tmp/errors
Questo è particolarmente complicato, perché lo stesso comando funzionerà se eseguito da shell. La ragione è che cron
non ha la stessa variabile d'ambiente PATH
dell'utente.