
Si configuro cron
los trabajos incorrectamente, parece que fallan silenciosamente. ¿Dónde debo buscar un registro de errores para comprender qué salió mal?
Respuesta1
Como otros han señalado, cron
le enviará por correo electrónico el resultado de cualquier programa que ejecute (si hay algún resultado). Entonces, si no obtiene ningún resultado, existen básicamente tres posibilidades:
crond
ni siquiera pude iniciar un shell para ejecutar el programa o enviar correo electrónicocrond
tuvo problemas para enviar el resultado por correo o el correo se perdió.- el programa no produjo ningún resultado (incluidos mensajes de error)
El caso 1. es muy improbable, pero debería haberse escrito algo en los registros cron. Cron tiene una función syslog reservada propia, por lo que deberías echar un vistazo /etc/syslog.conf
(o el archivo equivalente en tu distribución) para ver dónde cron
se envían los mensajes de la función. Los destinos populares incluyen /var/log/cron
y /var/log/messages
./var/log/syslog
En el caso 2., debe inspeccionar los registros del demonio de correo: los mensajes del demonio Cron generalmente aparecen a partir de root@yourhost
. Puede usar una MAILTO=...
línea en el archivo crontab para que cron envíe un correo electrónico a una dirección específica, lo que debería facilitar la búsqueda de los registros del demonio de correo. Por ejemplo:
[email protected]
00 15 * * * echo "Just testing if crond sends email"
En el caso 3., puedes comprobar si el programa realmente se ejecutó añadiendo otro comando cuyo efecto puedas comprobar fácilmente: por ejemplo,
00 15 * * * /a/command; touch /tmp/a_command_has_run
para que pueda comprobar si crond
realmente se ha ejecutado algo mirando el mtime de /tmp/a_command_has_run
.
Respuesta2
Siempre puede enviar explícitamente el resultado del trabajo a un archivo de registro:
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
Tenga en cuenta que esto reemplazará el comportamiento del correo que se mencionó anteriormente, porque crond iself no recibirá ningún resultado del trabajo. Si desea mantener ese comportamiento, debe consultar tee(1).
Respuesta3
Si no ve los correos electrónicos, es posible que esté enviando spam a root@yourcompany con errores que pueden resultar bastante molestos para las personas que usan esa cuenta para monitorear. Intente enviar la salida a Syslog en su lugar:
*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag
Luego, espere a que se ejecute el cronjob y busque el error en /var/log/messages (o /var/log/user.log en algunos sistemas).
Esto funciona muy bien para mensajes de error que tienen solo 1 o 2 líneas, como "yourcronjob: comando no encontrado". También hace uso de su infraestructura syslog existente (Logrotation, syslogging central, Splunk, etc.). También reduce el spam de correo electrónico a la raíz.
Puede que no sea una buena solución si su cronjob genera cientos de líneas de salida.
Respuesta4
La configuración cron predeterminada le enviará un correo con el resultado de su programa. Si esto falla, puede intentar empaquetar su programa defectuoso en un script de shell que garantice que el programa no falle y podría registrar aún más el resultado.
Esta es una configuración configurable en algunas implementaciones de cron.