it-swarm-es.tech

¿Dónde se registran los errores cron?

Si configuro cron trabajos incorrectamente, parecen fallar silenciosamente. ¿Dónde debo buscar un registro de errores para entender qué salió mal?

182
Brian Lyttle

Como otros han señalado, cron le enviará por correo electrónico la salida de cualquier programa que ejecute (si hay alguna salida). Entonces, si no obtiene ningún resultado, existen básicamente tres posibilidades:

  1. crond ni siquiera pudo iniciar un Shell para ejecutar el programa o enviar correo electrónico
  2. crond tuvo problemas para enviar la salida o se perdió el correo.
  3. el programa no produjo ningún resultado (incluidos los mensajes de error)

El caso 1. es muy poco probable, pero algo debería haberse escrito en los registros cron. Cron tiene una instalación de syslog reservada, así que deberías echar un vistazo a /etc/syslog.conf (o el archivo equivalente en su distribución) para ver dónde se envían los mensajes de la instalación cron. Los destinos populares incluyen /var/log/cron, /var/log/messages y /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 [email protected]. Puedes usar un 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 tarea de seleccionar los registros del demonio de correo. Por ejemplo:

[email protected]
00 15 * * *  echo "Just testing if crond sends email"

En el caso 3., puede probar si el programa se ejecutó realmente agregando otro comando cuyo efecto puede verificar fácilmente: por ejemplo,

00 15 * * * /a/command; touch /tmp/a_command_has_run

para que pueda verificar si crond realmente ha ejecutado algo mirando el mtime de /tmp/a_command_has_run.

116
Riccardo Murri

Siempre puede enviar explícitamente la salida 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 ha mencionado anteriormente, porque crond iself no recibirá ningún resultado del trabajo. Si desea mantener ese comportamiento, debe buscar en tee (1).

54
codehead

Si no está viendo los correos, es posible que esté enviando spam a root @ yourcompany con los errores que pueden ser bastante molestos para las personas que usan esa cuenta para el monitoreo. 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-2 líneas de largo, 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.

44
Stefan Lasiewski

Debería recibir un correo electrónico de crond cuando el trabajo no se ejecute o cuando el trabajo devuelva un código de salida distinto de cero. Intenta escribir:

$ mailx

en el símbolo del sistema.

mailx(1) es el programa básico de lectura de correo en la mayoría de los sistemas Unixlike. Es muy primitivo según los estándares modernos, pero puede contar con que siempre esté disponible. Otros mejores agentes de correo pueden estar disponibles, pero hay suficientes para que nunca sepas cuál está instalado en alguna máquina aleatoria que estás usando.

Tenga en cuenta que a menos que haya configurado su sistema como un servidor de correo electrónico de Internet, este subsistema de correo solo se usa dentro de la máquina. Puede enviar y recibir correos electrónicos de otros usuarios en la máquina, pero es posible que no pueda enviar correos electrónicos al mundo, y los correos electrónicos del mundo exterior ciertamente no podrán llegar a su máquina.

8
Warren Young

La configuración cron predeterminada le enviará un correo con la salida de su programa. Si esto falla, puede intentar ajustar su programa defectuoso en un script de Shell que garantice que el programa no falle, y podría seguir registrando la salida.

Esta es una configuración configurable en algunas implementaciones cron.

8
miguel.de.icaza

Cron registra información básica en /var/log/messages, pero envía cualquier salida de programa al usuario que invoca.

5
Hemant

Me encontré con este hilo hace unos años, experimentando los mismos problemas y recientemente encontré una solución para los casos mencionados por Ricardo. La falta de un correo electrónico es difícil de detectar (como mencionó) y ciertamente no desea enviar spam a su correo electrónico raíz @ su empresa. Si está interesado, consulte deadmanssnitch.com. . Esta herramienta parece resolver los casos antes mencionados. Parece bastante simple de usar, solo agregue el bit de código que la herramienta le brinda a su cronjob. Si su trabajo no se ejecuta en un interno específico, recibirá una alerta. Si su trabajo comienza a ejecutarse nuevamente, también recibirá una alerta.

2
ss_jt

Yo suelo vixie-cron, así que no sé si esto se aplica a todo. Pero tengo un dead.letter archivo que contiene toda la salida del trabajo.

En mi /root/ carpeta que tengo crons.cron que configuré como mi crontab ejecutando crontab /root/crons.cron. dead.letter se creará en /root/ también.

Editar Acabo de Google'd dead.letter, y es un correo que no se puede entregar. No tiene nada que ver con cron aparentemente. Si no tiene el correo configurado correctamente (como yo), tendrá el archivo.

1
jonescb

Otro truco útil es ver qué scripts se ejecutan realmente.

Esto se hace con run-parts -v --test /etc/cron.hourly/

> /etc/cron.hourly//logrotate

Si su script no aparece, no se ejecutará.

Por cierto, esto solo funciona para los scripts instalados en /etc/cron.hourly directorio. No muestra los elementos que se configuran en su crontab.

1
RickyA

Para los novatos, esto podría ser un dolor de depuración. Asegúrese de no intercambiar los valores de minutos y horas. Primero viene el minuto, luego la hora. Cuando proporcione valores inferiores a 12 para cada uno, los aceptará, pero puede que no funcione como se esperaba o no funcionará.

0
Michael Woyo