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:
*/1 * * * * env > /tmp/env
Obtenemos las variables utilizadas en la ejecución de Cron:
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:
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 .