2011-01-27 23 views
133

Quiero saber cómo puedo ver exactamente qué están haciendo los trabajos cron en cada ejecución. ¿Dónde están ubicados los archivos de registro? ¿O puedo enviar la salida a mi correo electrónico? He configurado la dirección de correo electrónico para enviar el registro cuando se ejecuta la tarea cron, pero todavía no he recibido nada.Cron Job Log - ¿Cómo iniciar sesión?

Respuesta

216
* * * * * myjob.sh >> /var/log/myjob.log 2>&1 

registrará toda la salida del trabajo de cron para /var/log/myjob.log

Es posible utilizar mail para enviar mensajes de correo electrónico. La mayoría de los sistemas enviarán la salida de trabajo no controlada cron por correo electrónico a la raíz o al usuario correspondiente.

+51

Descripción de lo que significa '2> & 1': http://stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21 – Yamaneko

+4

¿cuál podría ser el problema si este archivo de registro nunca se crea ? – clamp

+9

FWIW, si desea 'stderr' y' stdout' en el registro, el '2> & 1' debe venir después de la indirección:' myjob.sh >> /var/log/myjob.log 2> & 1' –

44

Por troncos cron por defecto en/var/log/syslog para que pueda ver las entradas relacionadas cron mediante el uso de:

grep CRON /var/log/syslog 

https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log

+1

¿No sería'/var/log/syslog.log' –

+1

no necesita para tener la extensión * .log, esos son archivos de texto sin formato. – Piero

+1

No tengo en Mac OS X Mountain Lion. – Nakilon

8

Aquí está mi código:

* * * * * your_script_fullpath >> your_log_path 2>&1 
+0

" >> "significa anexar datos a fileright? ¿Qué significa "2> & 1", salida completa con error, ¿verdad? – Nullpointer

+1

Las preguntas de redirección básica se verifican mejor en el manual. También hay un métrico de preguntas duplicadas sobre estos operadores aquí en Stack Overflow. Pero sí, aproximadamente; '>>' se agrega y '2> & 1' dice que envíe un error estándar al mismo lugar que la salida estándar. – tripleee

7

Hay son al menos tres tipos diferentes de registro:

  1. El registro ANTES de ejecutar el programa, que solo registra SI el cronjob TRIED para ejecutar el comando. Esa se encuentra en /var/log/syslog, como ya se mencionó en @Matthew Lock.

  2. El registro de errores DESPUÉS de que el programa intentó ejecutar, que se puede enviar a un correo electrónico o un archivo, como se menciona en @Spliffster. Prefiero registrar en un archivo, porque con el correo electrónico ENTONCES tiene una NUEVA fuente de problemas , y su comprobación si el envío y recepción de correo electrónico está funcionando perfectamente . A veces lo es, a veces no lo es. Por ejemplo, en una sencilla máquina de escritorio común en el que no está interesado en configurar un SMTP, a veces se prefiere el registro en un archivo:

    * * * * COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1 
    
    • También me gustaría considerar el comprobar los permisos de/ABSOLUTE_PATH_TO_LOG y ejecuta el comando desde los permisos de ese usuario. Solo para verificación, mientras prueba si podría ser una fuente potencial de problemas.
  3. El registro del programa en sí, con su propio manejo de errores y registro con fines de seguimiento.

Hay algunas fuentes comunes de problemas con cronjobs: * La RUTA ABSOLUTA del binario que se ejecutará. Cuando lo ejecuta desde su shell , podría funcionar, pero el proceso cron parece usar otro entorno , y por lo tanto, no siempre encuentra binarios si no usa la ruta absoluta. * Las BIBLIOTECAS usadas por un binario. Es más o menos el mismo punto anterior, pero asegúrese de que, si simplemente coloca el NOMBRE del comando, se refiere exactamente al binario que usa la misma biblioteca, o mejor, verifique si el binario al que se refiere con la ruta absoluta es el mismo que recomienda cuando usa la consola directamente.Los binarios se pueden encontrar utilizando el comando localizar, por ejemplo:

$locate python 

Asegúrese de que el binario que se referirá, es el mismo el binario que está llamando en su concha, o simplemente probar de nuevo en su shell usando el camino absoluto que planeas poner en el cronjob.

  • Otra fuente común de problemas es la sintaxis en el cronjob. Recuerde que hay caracteres especiales que se pueden utilizar en las listas (comas), para definir rangos (guiones -), para definir aumento de rangos (barras), etc. Eche un vistazo: http://www.softpanorama.org/Utilities/cron.shtml
1

En caso que usted está ejecutar algún comando con sudo, no lo permitirá. Sudo necesita un tty.

+2

Esto también depende de la configuración 'sudo'. Las cosas que necesitan ejecutarse sin una forma de proporcionar una contraseña se deben configurar con 'NOPASSWD:' en su configuración 'sudoers'. – tripleee

1

En Ubuntu puede habilitar un archivo cron.log para contener solo las entradas CRON.

Elimine la línea que menciona cron en /etc/rsyslog.d/50-default.conf archivo:

# Default rules for rsyslog. 
# 

#      For more information see rsyslog.conf(5) and /etc/rsyslog.conf 

# 
# First some standard log files. Log by facility. 
# 
auth,authpriv.*     /var/log/auth.log 
*.*;auth,authpriv.none   -/var/log/syslog 
#cron.*       /var/log/cron.log 

Guardar y cerrar el archivo y reinicie el servicio rsyslog:

sudo systemctl restart rsyslog 

Ahora puede ver entradas de registro cron en su propia archivo:

sudo tail -f /var/log/cron.log 

salidas de la muestra:

Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 

Sin embargo, no se pueden ver más información acerca de lo que en realidad fueron los scripts ejecutar dentro /etc/cron.daily o /etc/cron.hourly, a menos que esos guiones salida directa a la cron.log (o tal vez a algún otro archivo de registro).

Si desea verificar si un crontab se está ejecutando y no tener que buscar en cron.log o syslog, crear un crontab que redirige la salida a un archivo de registro de su elección - algo así como:

# For more information see the manual pages of crontab(5) and cron(8) 
# 
# m h dom mon dow command 
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1 

Pasos tomados de: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/

+0

Ubuntu 16.04 no mostró ningún registro cron y esta información funcionó. – pojda

0

Todo lo anterior no funciona para mí. Entonces, tengo que agregar el 'MAILTO = [mi correo electrónico]' en la parte superior del archivo del crontab en /etc/cron.d/ y recibí la respuesta porque el comando cron obtuvo errores.

0

cron ya envía la salida estándar y el error estándar de cada trabajo que ejecuta por correo al propietario del trabajo cron.

Puede usar MAILTO=recipient en el archivo crontab para que los correos electrónicos se envíen a una cuenta diferente.

Para que esto funcione, necesita que el correo funcione correctamente. El envío a un buzón de correo local generalmente no es un problema (de hecho, es probable que ls -l "$MAIL" revele que ya ha estado recibiendo alguno) pero para sacarlo de la caja y salir a internet requiere el MTA (Postfix, Sendmail, ¿qué tiene?) estar configurado correctamente para conectarse al mundo.

Cuestiones relacionadas