
Recuerdo haber jugado con crontab y configurar capacidades de correo electrónico en un servidor hace muchos meses, y ahora, de repente, recibo el siguiente correo electrónico:
ENCABEZADO DEL CORREO ELECTRÓNICO:
from: root <[email protected]>
to: root
date: Thu, Dec 5, 2013 at 6:48 AM
subject: Cron <root@server-ip> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
mailed-by: gmail.com
CUERPO DEL CORREO ELECTRONICO:
/etc/cron.daily/mlocate:
/usr/bin/updatedb.mlocate: `/var/lib/mlocate/mlocate.db' is locked (probably by an earlier updatedb)
run-parts: /etc/cron.daily/mlocate exited with return code 1
Esto está en Ubuntu Server 12.04.1 LTS. Ni siquiera sé qué servidor de correo electrónico estoy usando ni cómo averiguarlo. Mi comprensión del /etc/cron.daily
directorio debe ser incorrecta, porque cuando lo hago crontab -l
(tanto para el usuario raíz como para mi usuario habitual) dice que no hay crontab.
¿Quizás sea un problema con updatedb
el correo electrónico o cron?
EDITAR: Eliminé los procesos /bin/bash /etc/cron.daily/mlocate
y /usr/bin/updatedb.mlocate
y eliminé el bloqueo, ahora tendré que esperar para ver si recibo el error nuevamente.
Respuesta1
- Realmente ayuda si especificas en qué sistema operativo estás. Supongo que se trata de alguna distribución de Linux...
- Se está ejecutando
/etc/cron.daily/mlocate
y ese script tiene un error, probablemente deberías solucionarlo. - No veo ninguna pregunta allí.
Respuesta2
¡Los carteles anteriores han errado por completo!
En primer lugar, el cartel original decía claramente qué sistema operativo está usando: Ubuntu Server 12.04.1 LTS.
En segundo lugar, ayuda a comprender los procesos a nivel de sistema en un sistema tipo UNIX. Las tablas cron a nivel del sistema están configuradas para ejecutar procesos de limpieza en horarios programados regularmente. Dado que un trabajo cron no tiene un terminal conectado al que enviar mensajes de error, estos se envían por correo electrónico al usuario de la pestaña cron, en este caso, el administrador del sistema.
En tercer lugar, no debe simplemente desactivar el envío de estos mensajes por correo electrónico ni el procesamiento de trabajos cron. Son una indicación de que hay un problema y es necesario abordar la causa raíz.
En el caso de este mensaje en particular, yo también comencé a recibirlos después de realizar una actualización regular que involucraba mlocate. El proceso se detuvo y no pudo finalizar esperando a que finalizara una operación de E/S. Eche un vistazo a la tabla de procesos:
$ ps -ef |grep mlocate
scott 14564 14416 0 19:49 pts/0 00:00:00 grep mlocate
root 16326 16113 0 Apr06 ? 00:00:00 /bin/bash /etc/cron.daily/mlocate
root 16332 16326 0 Apr06 ? 00:00:00 /usr/bin/updatedb.mlocate
La solución más simple es simplemente finalizar los procesos involucrados y dejar que el próximo tiempo programado de cron se ejecute nuevamente más tarde.
$ sudo kill -9 16326 16332
Tenga en cuenta que esto generará un único mensaje cron nuevo, ya que el proceso bloqueado se elimina y cron lo ve como un error:
From: root@XXXXXXX (Cron Daemon)
To: root@XXXXXXX
Subject: Cron <root@XXXXXXX> test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
Date: Sun, 08 Apr 2014 19:54:36 -0400 (EDT)
run-parts: /etc/cron.daily/mlocate exited because of uncaught signal 9
Eso es una indicación de que aclaró las cosas y ahora la siguiente instancia debería funcionar normalmente.
Respuesta3
- problema en el mlocate.
- Los mensajes se envían directamente desde el servidor IP del servidor.
- vaya a
/var/spool/cron/
y hagagrep -ir MAILTO
la misma verificación deMAILTO
entradas en el/etc/crontab
archivo. - Si no desea recibir mensajes de crond, simplemente elimine la cadena MAILTO
- (probablemente por una actualización anteriorb) <- si comenzó a recibir mensajes hoy, simplemente dele a mlocate un poco más de tiempo para terminar el trabajo en el servidor.