2011-11-15 14 views
25

Agregué un trabajo cron recientemente, pero cometí un error en la ruta al dar el comando y, por lo tanto, el trabajo nunca tuvo éxito. ¿Hay alguna manera de probar los cambios cron que hemos hecho?Test run cron entry

Tenga en cuenta que, efectivamente, he copiado y pegado el comando desde mi línea de comandos y fue solo una tecla que causó esto.

Respuesta

20

Esta cuestión también se ha preguntado sobre serverfault and has garnered a couple additional answers

La siguiente es una versión parafraseada de Marco's solution: (No estoy seguro si mejor ediquite no está proporcionando un enlace única respuesta o no la copia de otra solución)

crear un archivo de entorno con una entrada cron temporal

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

a continuación, crear un script de shell llamado run-as-cron que ejecuta el comando utilizando tha t entorno.

#!/bin/sh 

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

Se utiliza entonces como esto:

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

por ejemplo

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

¿Dónde obtuviste el comando ** run -as-cron **? –

+0

@IgorGanapolsky No estoy seguro, pero podría ser el nombre del script de shell anterior. – ptf

+0

"crea un script de shell llamado run-as-cron" – RichardAtHome

38

Cuando quiero probar mis tareas de cron, generalmente establezco el intervalo muy bajo y monitoreo los registros de cerca. Cuando estoy convencido de que la entrada es correcta, establezco el intervalo de nuevo a un valor razonable.

Por ejemplo, puestos de trabajo que se ejecute cada dos minutos:

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

Y el corro tail -f en mi archivo de registro (/var/log/syslog en debian).

+6

Eso es lo que hago también, excepto en un minuto ... pero ojalá hubiera una manera de pedirle a crontab que lo ejecute con un comando, para que no siempre tenga que esperar hasta un minuto hasta que crontab ejecuta el comando, solo para ver si se ejecutará. – Teekin

+0

Lo más cercano que obtendrá es ejecutar '/ bin/sh'. Por otra parte, no debe ejecutar comandos complejos directamente desde cron. Use una secuencia de comandos externa en su lugar! –

+2

Exactamente, así que cuando la ejecución/bin/sh funciona pero no la tarea cron, se vuelve bastante frustrante depurarla, incluso si solo es la espera de 40-50 segundos para ver si funciona la próxima vez. – Teekin

2

La respuesta de Joshua no funciona para mí. Dos problemas:

  • Variables en cron-env archivo no se exportan (set -a necesario).

  • La secuencia de comandos todavía está ligada al tty actual (setsid necesario).

run-as-cron El guión debe ser

#!/bin/sh 

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

insuficiente representante' para fijar su respuesta o añadir un comentario ...

0

comando use crontab -e Esto abrirá un editor vim y todo lo que tienes que hacer aquí es * * * * * /somepath/urscript.sh, asegúrate de tener los espacios apropiados entre las fechas y la ruta del script Después de la ejecución, puedes verificar el/var/spool/correo habrá un seguimiento completo de la ejecución del script o errores. Para las pruebas no hay forma ... pero en caso de que tu sh urscript.sh funcione, la pestaña cron no tendrá ningún problema ya que es exactamente lo mismo que lo que haces manualmente.