¿Postfix ya no se registra en / var / log / mail después de que se haya eliminado y vuelto a crear?

10

Accidentalmente borré el /var/log/mailarchivo. Hasta ese momento pude monitorearlo usando cosas de postfix. Ahora, parece que Postfix no envía sus registros /var/log/mail, ya que el archivo no se actualiza con nuevos mensajes de registro.

drpaneas
fuente

Respuestas:

9

Cuando elimina el archivo mail.log, rsyslog (en ubuntu) suelta el identificador del archivo. Para que vuelva a funcionar en Ubuntu, proporcione:

sudo service rsyslog restart

Esto no solo creará un nuevo archivo sino que también comenzará a escribir registros.

Ashish
fuente
1
En lugar de decir lo que hizo, haga la respuesta más general (de manera instructiva) diciéndonos por qué.
Julie Pelletier
4

Incluso después de crear un archivo vacío

touch /var/log/mail

tienes que reiniciar el syslog

service syslog restart

y luego es ganancia de registro :)

drpaneas
fuente
4

Este es un error en syslog, pero ilustra un problema común cuando uno elimina un archivo mientras está abierto por un programa. Cuando hace un "rm", está eliminando una entrada de directorio, pero NO está eliminando el archivo subyacente. El sistema operativo mantiene un recuento de referencias al archivo y en realidad no eliminará los datos del archivo subyacente hasta que el recuento de referencias llegue a cero. En el caso de un archivo promedio, el recuento de referencia del archivo sin abrir es uno (la entrada del directorio). Cuando se abre el archivo, el recuento se incrementa a dos. Si un segundo programa abre el mismo archivo, el recuento se incrementará a tres. Si la entrada del directorio ahora se elimina, el recuento se reduce a dos, lo que significa que el archivo es anónimo (no tiene nombre),

Cuando elimina / var / log / mail, el registrador del sistema todavía tiene el archivo abierto para escritura. Si crea un nuevo / var / log / mail, apuntará a un archivo diferente del que el registrador del sistema está escribiendo actualmente. La única forma de hacer que todo sea coherente es reiniciar el registrador del sistema. Cuando finaliza el registrador del sistema original, todos los archivos asociados con él se cierran, incluido el registro de correo anónimo cuya entrada de directorio eliminó. Cuando reinicie el registrador del sistema, volverá a abrir / var / log / mail cuando necesite escribir un mensaje de registro y lo mantendrá abierto a partir de entonces.

Otra forma en que esto se descubre a menudo es cuando un programa en ejecución llena todo un disco con datos de archivo; el usuario elimina el archivo muy grande, pero el espacio en disco no se libera, porque el archivo todavía existe y está ocupando espacio en disco, pero la entrada del directorio se ha eliminado. Cuando finaliza el programa (ya sea porque el usuario lo mató o porque terminó), el espacio en disco se recuperará porque el recuento de referencias en el archivo habrá llegado a cero.

Lo que podría hacer el registrador para evitar esto es primero escribir el mensaje de registro, verificar si la entrada del directorio del archivo de registro existe y, si no existe, cerrar el archivo de registro original, abrir uno nuevo y luego volver a escribir el mensaje: para que el mensaje no se pierda. Pero hacer todo eso requeriría mucha más complejidad de la que debería tener el registrador del sistema, ya que cada mensaje que escriba tardará un poco más en escribirse debido a la verificación adicional del directorio, que tendrá éxito cada vez que el archivo tenga NO ha sido eliminado.

Para comprender todo lo anterior más claramente, el siguiente comando es instructivo, ya que describe la llamada al sistema que realiza la eliminación de la entrada del directorio y la disminución de la referencia: "man 3 unlink"

Douglas Campbell
fuente
4

Ese no es el problema en CentOS 7. Alguien pensó que sería una gran idea tener los registros de correo postfix para revisar el diario. Si desea ver registros de postfix:

journalctl -u postfix

(para ver el registro completo)

journalctl -u postfix -f

(para seguir el registro)

También puede necesitar en el main.cf para postfix

syslog_name = postfix
nick sastre
fuente
1
Pasé tres horas tratando de reparar un sistema donde desapareció el registro. Si no hubiera encontrado esta publicación, habría pasado otras 3 horas. Mi diario tenía 10000 líneas, por lo que este comando también me ayudó muchojournalctl --vacuum-time=1d
Eugene van der Merwe el
2

fwiw versiones más nuevas del registro de postfix /var/log/mail.logy también tuve que ejecutar sudo chmod a+w /var/log/mail*y service postfix restartrecuperar mis registros de postfix después de eliminarlo

bsautner
fuente