2011-11-15 3 views
25

Ho aggiunto un cron job di recente, ma ho commesso un errore nel percorso dando il comando e quindi, il lavoro non è mai riuscito. C'è un modo per testare i cambiamenti di cron che abbiamo fatto?Test run cron entry

Si prega di notare che in effetti avevo copiato e incollato il comando dalla mia riga di comando e questo era solo un keypress vagante che causava questo.

risposta

20

Questa domanda è anche stato chiesto su serverfault and has garnered a couple additional answers

La seguente è una versione parafrasata di Marco's solution: (non so se migliore ediquite non fornisce un collegamento unica risposta o meno la copia di qualcun soluzione altro)

creare un file ambiente con una voce di cron temporanea

* * * * * /usr/bin/env > /home/username/cron-env 

Quindi creare uno script di shell chiamato run-as-cron che esegue il comando utilizzando tha t ambiente.

#!/bin/sh 

. "$1" 
exec /usr/bin/env -i "$SHELL" -c ". $1; $2" 

Viene quindi utilizzato in questo modo:

run-as-cron <cron-environment> <command> 

esempio

run-as-cron /home/username/cron-env 'echo $PATH' 
+0

Dove hai ottenuto il comando ** run -come-cron **? –

+0

@IgorGanapolsky Non sono sicuro, ma potrebbe essere il nome dello script di shell sopra. – ptf

+0

"crea uno script di shell chiamato run-as-cron" – RichardAtHome

38

Quando voglio testare i miei cron job di solito ho impostato un intervallo molto basso e monitorare i log da vicino. Quando sono convinto che la voce sia corretta, ho impostato l'intervallo su un valore corretto.

Per esempio, di posti di lavoro eseguire ogni due minuti:

*/2 * * * * echo "Hello World"

E il corro tail -f sul mio file di log (/var/log/syslog su debian).

+6

Questo è quello che faccio pure, tranne che con un minuto ... ma vorrei che ci fosse un modo per chiedere a crontab di eseguirlo con un comando, in modo che non si debba aspettare sempre fino a un minuto fino a quando crontab esegue il comando, solo per vedere se sta per funzionare. – Teekin

+0

Il più vicino si ottiene eseguendo '/ bin/sh'. Quindi, di nuovo, non dovresti eseguire comandi complessi direttamente da cron. Usa invece uno script esterno! –

+2

Esattamente, quindi quando funziona/bin/sh funziona ma non il lavoro cron, diventa piuttosto frustrante debuggarlo, anche se è solo l'attesa di 40-50 secondi per vedere se funziona la prossima volta. – Teekin

2

La risposta di Joshua non funziona per me. Due problemi:

  • variabili in cron-env file non vengono esportati (set -a necessario).

  • Lo script è ancora collegato allo tty corrente (necessario setsid).

Lo script dovrebbe essere run-as-cron

#!/bin/sh 

. "$1" 
exec setsid /usr/bin/env -i "$SHELL" -c "set -a; . $1; $2" </dev/null 

Non abbastanza rep' di fissare la sua risposta o aggiungere un commento ...

0

comando uso crontab -e Si aprirà un editor vim e tutto ciò che devi fare qui è * * * * * /somepath/urscript.sh, assicurati di avere gli spazi appropriati tra le date e il percorso dello script Dopo l'esecuzione, puoi controllare in/var/spool/mail ci sarà una traccia completa dell'esecuzione dello script o degli errori. Per il test non c'è modo .. ma nel caso in cui ur sh urscript.sh funzioni, la cron tab non avrà problemi in quanto è esattamente la stessa cosa che fai manualmente.