"(CRON) información (No MTA instalado, descartando la salida)" error en el registro del sistema

144

Tengo una nueva instalación de Ubuntu 12.04.1 LTS y una cantidad de servidores.

No he agregado trabajos cron o editado mi crontab en esos servidores, sin embargo, aproximadamente al mismo tiempo para cada máquina, obtengo un pico de CPU del 75% y la siguiente información en mi syslog en el momento del pico:

CRON[8380]: (CRON) info (No MTA installed, discarding output)

Tengo un monocompletar instalado y estoy ejecutando un servidor web de la pila de servicios.

¿Cuál es la mejor manera para evitar que esto suceda? Me gustaría poder eliminar el pico de CPU.

    
pregunta sungiant 27.11.2012 - 11:25

10 respuestas

138

Linux usa el correo para enviar notificaciones al usuario. La mayoría de las distribuciones de Linux tienen un servicio de correo (incluido un MTA) instalado. Ubuntu no lo hace.

Puede instalar un servicio de correo, por ejemplo, postfix, para resolver este problema.

sudo apt-get install postfix

O puede ignorarlo. No creo que la incapacidad de cron para enviar mensajes tenga algo que ver con el pico de la CPU (que está relacionado con el trabajo subyacente que se está ejecutando cron). Sería más seguro instalar un MTA y luego leer los mensajes ( mutt es un buen lector de correo del sistema).

    
respondido por el martin 01.01.2013 - 09:56
62

Esto sucede porque sus trabajos cron están produciendo resultados y luego el cron daemon intenta enviarle esa salida por correo electrónico (es decir, root). Si no necesita esa salida, la forma más fácil de resolver esto es descartarla en el crontab:

sudo crontab -e

y añada >/dev/null 2>&1 a cada trabajo:

* * * * * yourCommand >/dev/null 2>&1
    
respondido por el rob 26.04.2013 - 12:27
41

En mi caso, el mensaje insinuaba un problema de permisos con el script bash, pero no pude verlo hasta que instalé un MTA.

Como sugerí, ejecuté:

sudo aptitude install postfix

Elegí "Local" durante la configuración y después de ejecutar el trabajo cron de nuevo:

sudo tail -f /var/mail/<user>

En mi caso, reemplacé

<user>

con "raíz".

Pude ver el resultado del error relacionado con los permisos.

    
respondido por el Martin Carstens 10.07.2015 - 16:28
20

En crontab agrega esto como primera línea:

MAILTO=""

Esto evitará que cron intente enviar un correo electrónico.

    
respondido por el 88weighed 27.08.2015 - 15:06
19

Si no desea instalar un MTA (que actualmente no necesito), puede canalizar los resultados del trabajo cron a un archivo de registro.

sudo crontab -e

luego con tu trabajo cron se vería así.

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

entonces puede simplemente alinear el registro y ver qué sucedió

sudo tail -f -n 50 /var/log/somelogfile.log

Esto es lo que he estado haciendo en cualquier servidor que veo ese mensaje en syslog

    
respondido por el Andrew MacNaughton 17.04.2016 - 21:37
13

Como se indicó en una respuesta anterior, esto sucede porque tus trabajos cron están produciendo resultados, y luego el cron daemon intenta enviarle esa salida por correo electrónico. Si no desea (o no puede) instalar un MTA, pero quieres ver la salida, puede redirigir la salida del trabajo cron a un archivo de registro. Edite su archivo crontab con

crontab -e

(use sudo si el problema es con el crontab de la raíz) y agrega >> /some/log/file 2>&1 después de cada comando, así:

0 3 * * * cmd  >> /some/log/file 2>&1

Si hay múltiples comandos en una línea, separados por ; , && o || , debe hacer lo anterior para cada comando, así:

0 3 * * * cmd1  >> /some/log/file 2>&1;  cmd2  >> /some/log/file 2>&1

o agrúpelos de esta manera:

0 3 * * * (cmd1;  cmd2)  >> /some/log/file 2>&1

Si desea ignorar stdout y capturar solo stderr, use > /dev/null 2>> /some/log/file en su lugar. Coloque el archivo de registro donde desee: su directorio personal, /var/log , o incluso /tmp si estás seguro de que no necesitarás conservarlo.

Luego, mire el archivo de registro después de ejecutar el trabajo.

    
respondido por el G-Man 29.07.2016 - 04:40
10

Un efecto colateral de agregar /dev/null 2>&1 al comando cron job es que descartará tanto STDERR como STDOUT (Standard Error y Output). Esto funciona bien si no quieres ningún correo electrónico de cron. Pero si quiere que le enviemos sus errores por correo electrónico, use >/dev/null en su lugar. Lea esta publicación en el blog para obtener más información .

Sin embargo, aún necesitará instalar un MTA (agente de transferencia de mensajes) para enviar los correos electrónicos de error. Postfix es lo suficientemente simple de instalar con: sudo apt-get install postfix

    
respondido por el paneer_tikka 30.12.2013 - 18:27
8

Esta es una pregunta antigua, pero hay una respuesta adicional que es útil en algunas circunstancias.

Canaliza la salida de tu comando cron a través de logger para que termine en syslog.

Es un poco más fácil que instalar postfix, y coloca esta salida en syslog junto con tus otros registros. Este comando capturará stdout AND stderr para que no vea el mensaje No MTA installed y verá todos sus resultados en el registro del sistema.

Ejemplo de entrada de cron:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

Puede ver los registros con su etiqueta mycmd usando:

grep 'mycmd' /var/log/syslog
    
respondido por el Michael Hunter 23.10.2017 - 00:44
1

Puede establecer MAILTO=”” variable al comienzo de su archivo crontab . Esto también deshabilitará la alerta por correo electrónico. Edite / abra sus trabajos cron:

$ crontab -e

En la parte superior del archivo, ingrese:

MAILTO=""

enlace

    
respondido por el Damien Cuvillier 19.02.2018 - 06:18
0
  1. fisrt install postfix, puede resolver el problema

    root $ sudo apt-get install postfix

  2. si es Ubuntu, puede editar el archivo crontab

    root $ vim / etc / crontab

  3. atención, archivo superior, no hay ningún código en la primera línea, e ingrese

    MAILTO = root // usuario del sistema actual

  4. cuando cron ejecuta cualquier tarea, recibirás un correo electrónico

    root $ mail

respondido por el shahramlu 02.09.2018 - 09:40

Lea otras preguntas en las etiquetas