O Postfix não registra mais em / var / log / mail depois de ter sido excluído e recriado?

6

Eu acidentalmente excluí o arquivo /var/log/mail . Até aquele momento, consegui monitorá-lo usando coisas postfix. Agora, parece que o Postfix não envia seus logs para /var/log/mail , já que o arquivo não está sendo atualizado com novas mensagens de log.

    
por drpaneas 31.10.2014 / 10:46

5 respostas

7

Quando você exclui o arquivo mail.log, o rsyslog (no ubuntu) solta o identificador para o arquivo. Para fazê-lo funcionar no Ubuntu, por favor, indique:

sudo service rsyslog restart

Isso não apenas criará um novo arquivo, mas também iniciará a gravação de registros.

    
por 09.09.2016 / 18:46
4

Mesmo depois de criar um arquivo vazio

touch /var/log/mail

você precisa reiniciar o syslog

service syslog restart

e, em seguida, é ganho de registro:)

    
por 31.10.2014 / 10:50
2

fwiw versões mais recentes do log do postfix para /var/log/mail.log e eu também tive que executar sudo chmod a+w /var/log/mail* e service postfix restart para recuperar meus logs de postfix depois de excluí-lo

    
por 10.06.2016 / 18:14
2

Este é um bug no syslog, mas ilustra um problema comum quando um exclui um arquivo enquanto ele é aberto por um programa. Quando você faz um "rm", você está removendo uma entrada de diretório, mas você NÃO está removendo o arquivo subjacente. O sistema operacional mantém uma contagem de referências ao arquivo e, na verdade, não excluirá os dados do arquivo subjacente até que a contagem de referência seja zerada. No caso de um arquivo médio, a contagem de referência do arquivo não aberto é uma (a entrada de diretório). Quando o arquivo é aberto, a contagem é incrementada para dois. Se um segundo programa abrir o mesmo arquivo, a contagem será incrementada para três. Se a entrada de diretório for excluída agora, a contagem será decrementada para dois - o que significa que o arquivo é anônimo (não tem nome), mas não será excluído até que ambos os programas tenham uma abertura - nesse caso, o sistema operacional exclua o armazenamento em disco subjacente associado ao arquivo.

Quando você exclui / var / log / mail, o criador de logs do sistema ainda tem o arquivo aberto para gravação. Se você criar um novo / var / log / mail, ele apontará para um arquivo diferente daquele que o registrador do sistema está gravando no momento. A única maneira de tornar tudo consistente é reiniciar o logger do sistema. Quando o criador de logs do sistema original é encerrado, todos os arquivos associados a ele são fechados - incluindo o log de email anônimo cuja entrada de diretório você excluiu. Quando você reiniciar o criador de logs do sistema, ele reabrirá o / var / log / mail quando precisar gravar uma mensagem de log e a manterá aberta a partir de então.

Outra maneira de descobrir isso é quando um programa em execução preenche todo o disco com dados de arquivo; o usuário exclui o arquivo muito grande, mas o espaço em disco não é liberado, porque o arquivo ainda existe e está ocupando espaço em disco, mas a entrada de diretório foi removida. Quando o programa termina (ou porque o usuário o matou ou terminou em si), o espaço em disco será recuperado porque a contagem de referência no arquivo será zerada.

O que o logger pode fazer para evitar isso é primeiro gravar a mensagem de log, verificar se a entrada do diretório do arquivo de log existe e, se ela não existir, fechar o arquivo de log original, abrir um novo e então reescreva a mensagem - para que a mensagem não seja perdida. Mas fazer tudo isso exigiria muito mais complexidade do que o logger do sistema deveria ter - pois cada mensagem que ele escreve demorará um pouco mais para ser gravada devido à verificação extra do diretório - que será bem-sucedida toda vez que o arquivo tiver sido NÃO foi eliminado.

Para entender todos os itens acima com mais clareza, o comando a seguir é instrutivo, pois descreve a chamada do sistema que executa a remoção da entrada de diretório e o decremento de referência: "man 3 unlink"

    
por 01.12.2016 / 07:36
0

Esse não é o problema no CentOS 7. Alguém achou que seria uma ótima idéia ter os logs de e-mail postfix para passar pelo journaler. Se você quiser ver os logs do postfix:

journalctl -u postfix

(para ver o log inteiro)

journalctl -u postfix -f

(para completar o log)

Você também pode precisar no main.cf para o postfix

syslog_name = postfix
    
por 10.12.2018 / 15:55