Come appare il messaggio
CRON[2418]: (root) CMD (/usr/local/bin/job.sh)
/usr/local/bin/job.sh: 3: mysqldump: not foundCause frequenti
- Cron ha un
PATHdiverso dalla tua shell e non legge.bashrc. - Lo script usa percorsi relativi e quindi gira nella directory sbagliata.
- Manca il permesso di esecuzione o lo shebang punta a un interprete inesistente.
- La riga è nella crontab dell'utente sbagliato, o in
/etc/cron.dsenza la colonna utente. - Cron stesso non è attivo, oppure un errore di sintassi impedisce il caricamento del file.
Verifica
- Servizio cron e ultime esecuzioni
systemctl status cron --no-pager | head -n 5; journalctl -u cron --since '1 hour ago' --no-pager | tail -n 20 - Righe dell'utente corrente
crontab -l - Permessi e shebang
ls -l /usr/local/bin/job.sh; head -n 1 /usr/local/bin/job.sh - Prova con ambiente vuoto come cron
env -i /bin/sh -c '/usr/local/bin/job.sh'
Soluzione
- Usa percorsi assoluti nello script e imposta
PATHin cima:PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin. - Redirigi l'output su un file di log:
>> /var/log/job.log 2>&1. Altrimenti gli errori non li vedi mai. - Controlla lo shebang (
#!/bin/bash) e imposta il permesso conchmod +x. - In
/etc/cron.dnon dimenticare la colonna utente, altrimenti la riga viene ignorata. - Prova con
env -iper avere lo stesso ambiente di cron.
Domande frequenti
Perché a mano funziona e con cron no?
Perché cron parte senza il tuo ambiente di shell: PATH diverso, niente home, niente alias.
Dove finisce l'output?
Cron lo invia per mail all'utente locale. Senza mail server sparisce, quindi logga sempre su file.