Esta pagina se ve mejor con JavaScript habilitado

Debugear script en CRON

 ·  🎃 kr0m

En el handbook de FreeBSD tenemos instrucciones concretas sobre como configurar Cron, en ese mismo manual podemos encontrar una parte muy interesante en la que muestra como ejecutar un script/binario exactamente igual como lo haría Cron, de este modo podemos debugear cualquier tipo de problema.

Primero obtenemos las variables de entorno presentes en Cron ejecutando env y guardando la salida a un fichero:

crontab -e

*/1 * * * * env > /tmp/env

Obtenemos las variables utilizadas en la ejecución de Cron:

grep -e SHELL -e PATH -e HOME -e LOGNAME /tmp/env

LOGNAME=kr0m
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/home/kr0m/bin
HOME=/home/kr0m
SHELL=/bin/sh

Finalmente ejecutamos el script exactamente igual como lo haría Cron, de este modo podemos ver si dá algún tipo de problema:

env -i SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/home/kr0m/bin HOME=/home/kr0m LOGNAME=kr0m PATH_TO_SCRIPT

Siempre, siempre, siempre ejecutar los scripts de este modo antes de crontabearlos ya que si no lo hacemos puede que confiemos en su ejecución y realmente no funcionen.

Otra manera de debugear posibles errores en la ejecución es redirigir la salida estandar y la de error a un fichero de log:

# Script running from cron job, send ALL output to logfile
if [ "${TERM:-dumb}$PS1" == "dumb" ]; then
    LOG_FILE='/tmp/cron.log'
    > $LOG_FILE
    exec 2> $LOG_FILE # Redirect STDERR to logfile
    exec 1>&2 # Redirect STDOUT to STDERR
fi

Si el Cron precisa de alguna entrada por parte del usuario o si realiza alguna operación vía SSH y la key está protegida siempre podemos utilizar Expect tal como hicimos en este artículo anterior .

Si te ha gustado el artículo puedes invitarme a un RedBull aquí