Postfix non registra più in / var / log / mail dopo che è stato eliminato e ricreato?


10

Ho eliminato per errore il /var/log/mailfile. Fino a quel momento sono stato in grado di monitorarlo usando roba postfix. Ora, sembra che Postfix non invii i suoi registri /var/log/mail, poiché il file non viene aggiornato con i nuovi messaggi di registro.

Risposte:


9

Quando si elimina il file mail.log, rsyslog (su ubuntu) perde l'handle nel file. Per farlo funzionare nuovamente su Ubuntu, ti preghiamo di dare:

sudo service rsyslog restart

Questo non solo creerà un nuovo file, ma inizierà anche a scrivere registri.


1
Invece di dire quello che hai fatto, rendi la risposta più generale (in modo istruttivo) dicendoci perché.
Julie Pelletier,

4

Anche dopo aver creato un file vuoto

touch /var/log/mail

devi riavviare il syslog

service syslog restart

e quindi sta registrando il guadagno :)


4

Questo è un bug in syslog, ma illustra un problema comune quando si elimina un file mentre è aperto da un programma. Quando si esegue un "rm", si rimuove una voce di directory, ma NON si rimuove il file sottostante. Il sistema operativo mantiene un conteggio dei riferimenti al file e non eliminerà effettivamente i dati del file sottostante fino a quando il conteggio dei riferimenti non sarà a zero. Nel caso di un file medio, il conteggio dei riferimenti del file non aperto è uno (la voce della directory). Quando il file viene aperto, il conteggio viene incrementato a due. Se un secondo programma apre lo stesso file, il conteggio verrà incrementato a tre. Se la voce della directory viene ora eliminata, il conteggio viene ridotto a due, il che significa che il file è anomalo (non ha nome),

Quando si elimina / var / log / mail, il logger di sistema ha ancora il file aperto per la scrittura. Se si crea un nuovo / var / log / mail, punterà a un file diverso da quello che sta attualmente scrivendo il logger di sistema. L'unico modo per rendere tutto coerente è riavviare il logger di sistema. Al termine del logger di sistema originale, tutti i file ad esso associati vengono chiusi, incluso il registro di posta anonimo di cui è stata eliminata la voce della directory. Quando riavvii il logger di sistema, riaprirà / var / log / mail quando dovrà scrivere un messaggio di log e lo terrà aperto in seguito.

Un altro modo in cui questo viene spesso scoperto è quando un programma in esecuzione riempie tutto il disco di dati di file; l'utente elimina il file molto grande, ma lo spazio su disco non viene liberato, poiché il file esiste ancora e occupa spazio su disco, ma la voce della directory è stata rimossa. Quando il programma termina (o perché l'utente lo ha ucciso o è terminato da solo), lo spazio su disco verrà recuperato perché il conteggio dei riferimenti sul file sarà andato a zero.

Ciò che il logger potrebbe fare per impedire ciò è scrivere prima il messaggio di registro, verificare se esiste la voce della directory del file di registro e, se non esiste, chiudere il file di registro originale, aprirne uno nuovo e quindi riscrivere il messaggio - in modo che il messaggio non vada perso. Ma per fare tutto ciò richiederebbe molta più complessità di quanto dovrebbe avere il logger di sistema - per ogni messaggio che scriverà ci vorrà un po 'più tempo per essere scritto a causa del controllo extra della directory - che avrà successo ogni volta che il file ha NON è stato cancellato.

Per comprendere tutto quanto sopra in modo più chiaro, il seguente comando è istruttivo, poiché descrive la chiamata di sistema che esegue la rimozione della voce di directory e il decremento di riferimento: "man 3 unlink"


4

Questo non è il problema su CentOS 7. Qualcuno ha pensato che sarebbe stata una grande idea avere i registri di posta postfix da passare attraverso il journaler. Se vuoi vedere i log postfix:

journalctl -u postfix

(per vedere l'intero registro)

journalctl -u postfix -f

(per accodare il registro)

Potresti anche aver bisogno in main.cf per postfix

syslog_name = postfix

1
Ho trascorso tre ore a cercare di riparare un sistema in cui scompariva la registrazione. Non ho trovato questo post, avrei trascorso altre 3 ore. Il mio diario aveva centinaia di migliaia di righe, quindi anche questo comando mi ha aiutato moltojournalctl --vacuum-time=1d
Eugene van der Merwe,

2

dopo le nuove versioni del log postfix /var/log/mail.loge ho dovuto anche eseguire sudo chmod a+w /var/log/mail*e service postfix restartriavere i miei log postfix dopo averlo eliminato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.