it-swarm.it

Perché il mio crontab non si è attivato?

Ero solito crontab -e per aggiungere la seguente riga al mio crontab:

* * * * * echo hi >> /home/myusername/test

Tuttavia, non vedo che il file di test sia scritto. Si tratta di un problema di autorizzazione o crontab non funziona correttamente?

Vedo che il processo cron è in esecuzione. Come posso eseguire il debug di questo?

Modifica - Chiedi a Ubuntu di avere na bella domanda su crontab , purtroppo non mi aiuta ancora.

Modifica 2 - Hmm, sembra che il mio file di test abbia 214 righe, il che significa che negli ultimi 214 minuti è stato scritto su ogni minuto. Non sono sicuro di quale fosse il problema, ma evidentemente se n'è andato.

29
ripper234

Ci sono implementazioni di cron (non tutte, e non ricordo quale sia, ma ne ho incontrato uno su Linux) che controlla i file crontab aggiornati ogni minuto al minuto e non considera nuove voci fino al minuto successivo. Pertanto, un crontab può richiedere fino a due minuti per accendersi per la prima volta. Questo potrebbe essere quello che hai osservato.

28
gelraen

Ho avuto lo stesso problema: un crontab funzionante si è fermato all'improvviso dopo aver aggiunto una nuova voce alla fine. Si è scoperto che avevo dimenticato di mettere una nuova riga dopo quest'ultima riga.

Ho scoperto emettendo il comando

cat /var/log/syslog | grep crontab

e l'output ha mostrato il problema:

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

L'aggiunta della nuova riga e il salvataggio hanno risolto il problema.

10
uniomni

Sembra che questo sia risolto. La prossima volta, prova anche a registrare STDERR. Quanto segue accederà solo a STDOUT, non a STDERR:

* * * * * echo hi >> /home/myusername/test

Cerca di assicurarti che esista una clausola esplicita anche per STDERR. Altrimenti, STDERR potrebbe essere inviato via e-mail all'utente (supponendo che l'e-mail funzioni) o potrebbe non andare da nessuna parte, a seconda della configurazione di Cron.

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

Le mie preferenze è inviare l'output di cronjob a syslog. In questo modo sto sfruttando qualsiasi infrastruttura syslog esistente (syslog centralizzati, Splunk, rotazione dei log già supportata, è facile confrontare i messaggi in/var/log/messages &/var/log/cronjob, ecc.), E non lo sono spamming agli amministratori di sistema (me) con e-mail non necessarie.

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
5
Stefan Lasiewski

Con me il problema era che lo script non era eseguibile. Ho avuto crontab -e setup in questo modo

* * * * * /bin/my-script.sh

E il file myscript non era eseguibile, quindi ho corso

chmod +x my-script.sh

Immediatamente ho iniziato a vedere l'output come previsto.

2
santiago arizti

Immagino che uno dei motivi potrebbe essere che la directory/home/è crittografata e quando l'utente è disconnesso cron non è in grado di fare nulla in quella directory.

vedi: https://stackoverflow.com/a/40354269/1279002

1
theINtoy

La tua cron line funziona perfettamente sul mio computer quando cambio myusernae in phunehehe. Esistono diversi modi per scoprire cosa non va nel tuo sistema.

Cron di solito invia posta all'utente quando c'è qualcosa che non va. Se viene visualizzato il messaggio "Hai posta", utilizzare un client di posta elettronica per controllare la posta in arrivo . Oppure, controlla nella tua home directory, potrebbe esserci un file chiamato dead.letter Là.

Puoi controllare /var/log/ per le voci relative a cron. Sul mio computer il file di registro è in /var/log/cron/current (richiede l'accesso come root).

Se si dispone dell'accesso root, è possibile arrestare il demone cron e avviarlo in modalità debug. Ad esempio, userei (cambio fcron con il nome del tuo demone):

killall fcron
fcron --foreground --debug
1
phunehehe

Molto probabilmente, quando cron fallisce, genera una e-mail all'ID utente del processo cron su quel computer. Se non hai un MTA funzionante sul tuo computer, o non stai leggendo o inoltrando quella posta da qualche altra parte, non vedrai quel messaggio, anche se l'MTA funziona.

Un buon modo per ottenere gli errori del tuo crontab via mail è far apparire il tuo crontab in questo modo:

MAILTO="[email protected]"
* * * * * echo hi >> /home/myusernae/test

Ovviamente, usa il tuo indirizzo e-mail anziché [email protected] Questo dice a cron di inviare errori al tuo indirizzo e-mail anziché all'account locale. In particolare, questo è utile se hai un crontab di root (o un frammento di crontab in /etc/cron.d) a cui vuoi solo inviarti un output, puoi evitare di spammare la casella di posta di root o l'indirizzo di inoltro di root.

1
jsbillings