Risposte:
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.
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"
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
journalctl --vacuum-time=1d