Comprobar la ejecución de un cron y ver sus posibles errores

Cuando creamos una tarea que debe ejecutarse regularmente con un cron muchas veces tenemos la duda de saber si se está ejecutando el comando correctamente.

El problema que tiene un cron es que el entorno en el que se usa no tiene por qué ser igual que el que nosotros estamos usando.

Dado que no se ejecuta en una consola “visible” no podemos ver lo que sucede cuando una tarea se pone en marcha. Tenemos que recurrir a algún “truquillo” para verlo. Os voy a presentar dos posibilidades.

Volcar la salida a un fichero log

La primera opción es hacer que los errores del script se guarden en un fichero.

Por ejemplo:

 * * * * * /home/usuario/script 1> /dev/null 2> /home/usuario/fichero.log

Esta línea elimina la salida del script y guarda los errores en fichero.log.

1> /dev/null hace que la salida del comando (lo que no son los errores) se descarte (enviándolos a /dev/null.

2> /home/usuario/fichero.log reenvía los errores al fichero.log.

Recuerda que los números 1 y 2 son:

  • 0 stdin Standard input
  • 1 stdout Standard output
  • 2 stderr Standard error

Tengo un artículo más completo sobre redirecciones aquí: [ENLACE].

También podríamos guardar tanto la salida del fichero como los errores:

* * * * * /home/usuario/script &> /home/usuario/fichero.log

Enviar el resultado del cron por email

En esta segunda opción lo que hacemos es recoger los errores y enviarlos por email:

* * * * * /home/usuario/script 1> /dev/null 2>&1 | mail -s "Errores del cron" tuemail@tuemail.com

NOTA: El comando mail debe estar instalado y configurado en tu sistema o no funcionará.

1> /dev/null hace que la salida del comando (lo que no son los errores) se descarte (enviándolos a /dev/null.

2>&1 envía los errores a stdout.

| permite que mail recoja los errores y los use como cuerpo del mensaje.

Simular el entorno de ejecución

Las anteriores opciones tienen la pega de que tenemos que esperar a que el cron se ejecute. Esta otra opción te permite probar el cron todas las veces que quieras.

Es tan sencillo como ejecutar este comando:

$ env -i /home/usuario/script

El comando env -i permite ejecutar el script que le indiquemos como si fuese una nueva consola.

De esta forma podemos probar nuestro script en condiciones similares a las que hace el cron.

Autor:
Nivel: Principiante
Palabras clave:
Fecha publicado:
Fecha actualizado: 22-08-2016

Otros capítulos de la misma serie

Este capítulo es parte de la serie: Configuración de un servidor.

Y muchos más en preparación.

Disponible en los planes: Laravel hero PHP a tope