¿Cómo puedo probar un nuevo script cron?

14

Me estoy ejecutando en un par de distribuciones de Linux diferentes (Fedora 11, CentOS 5 y SuSE 10.2) y a menudo me encuentro con un problema en el que un nuevo script que quiero ejecutar como trabajo cron funciona bien cuando se llama directamente desde la línea de comandos, pero falla cuando se llama desde cron debido a ligeras variaciones en la RUTA u otras variables de entorno requeridas.

¿Hay alguna manera de probar ejecutar un script individual como si se ejecutara desde cron, sin tener que ejecutar todo el crontab o usar run-parts para ejecutar todo el directorio cron.daily / .hourly, etc.? Supongo que podría editar temporalmente mi crontab para ejecutar el script en los próximos minutos, pero prefiero tener una solución más independiente para no arriesgarme a estropear el crontab.

gareth_bowles
fuente

Respuestas:

9

De google search enpath in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Básicamente, desea establecer la RUTA y luego no tener que preocuparse por las variaciones. Además, la prueba rápida es ejecutar su script a través de SSH en todos sus cuadros usando las mismas variables de entorno.

Jeremy L
fuente
Gracias, no había dicho que un crontab es como un script en el que puedes declarar variables de entorno dentro del crontab.
gareth_bowles
7

Si estoy ejecutando un trabajo cron programado individualmente (una línea separada en crontab) lo programaré para cada minuto o cada dos minutos mientras lo estoy probando. Una vez que se haya probado, editaré la línea crontab para que se ejecute en la frecuencia que deseo.

Como nota al margen, si quiero probar que el cron en sí mismo funciona correctamente y enviar los resultados por correo electrónico a la dirección correcta (MUY importante), agregaré la siguiente línea a mi / etc / crontab:

 * * * * * root ls /doesnotexistfoobar

Se ejecuta cada minuto e intenta hacer un lsen un directorio que no existe. Debería enviar un mensaje de error por correo electrónico cada minuto. Comento la línea cuando la tengo funcionando.

Volviendo a su pregunta: Probablemente no desee modificar el trabajo cron existente para que se ejecute con frecuencia, tanto porque existe la posibilidad de olvidarse de volver a cambiarlo como porque ejecuta cron.hourly, cron.daily o cron. podría tener efectos secundarios, dependiendo de lo que tenga allí. Para asegurarte de que estás ejecutando el script en el mismo entorno en el que estará cuando lo llames desde cron, te recomiendo modificar mi truco "ls" anterior:

Agregue una línea a su crontab para ejecutar el script directamente:

 * * * * * root /etc/cron.hourly/customscript

De esa manera, puede ejecutarlo con la frecuencia que necesite para probarlo.

Schof
fuente
Gracias, si pudiera votar por esta como la respuesta correcta también, ¡lo haría!
gareth_bowles
0

No conozco una solución más directa, pero podría crear un usuario (digamos, crontest) con privs para su script, y usar el crontab específico del usuario para que el usuario 'crontest' pruebe el script (s) editando para que el script se ejecute en los próximos minutos.

pez real
fuente