O Postfix não registra mais em / var / log / mail após ser excluído e recriado?


10

Apaguei acidentalmente o /var/log/mailarquivo. Até esse ponto, eu era capaz de monitorá-lo usando material de postfix. Agora, parece que o Postfix não envia seus logs para /var/log/mail, pois o arquivo não está sendo atualizado com novas mensagens de log.

Respostas:


9

Quando você exclui o arquivo mail.log, o rsyslog (no ubuntu) solta o identificador para o arquivo. Para que ele funcione novamente no Ubuntu, por favor, forneça:

sudo service rsyslog restart

Isso não apenas criará um novo arquivo, mas também começará a gravar logs.


1
Em vez de dizer o que você fez, torne a resposta mais geral (de maneira instrutiva) nos dizendo o porquê.
Julie Pelletier

4

Mesmo depois de criar um arquivo vazio

touch /var/log/mail

você precisa reiniciar o syslog

service syslog restart

e então está registrando ganho :)


4

Este é um erro no syslog, mas ilustra um problema comum quando um arquivo é excluído enquanto ele é aberto por um programa. Quando você faz uma "rm", está removendo uma entrada de diretório, mas NÃO está removendo o arquivo subjacente. O sistema operacional mantém uma contagem de referências ao arquivo e, na verdade, não exclui os dados subjacentes do arquivo até que a contagem de referência chegue a zero. No caso de um arquivo médio, a contagem de referência do arquivo não aberto é uma (a entrada do 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 do diretório agora for excluída, a contagem será decrementada para dois - o que significa que o arquivo é anômalo (sem nome),

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á escrevendo no momento. A única maneira de tornar tudo consistente é reiniciar o criador de logs do sistema. Quando o criador de logs do sistema original é encerrado, todos os arquivos associados a ele são fechados - incluindo o registro de mensagens anônimas cuja entrada de diretório você excluiu. Quando você reinicia o log do sistema, ele reabre / var / log / mail quando precisar gravar uma mensagem de log e o mantém aberto posteriormente.

Outra maneira de descobrir isso é quando um programa em execução preenche todo o disco com dados do 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 do diretório foi removida. Quando o programa termina (porque o usuário o matou ou terminou sozinho), o espaço em disco será recuperado porque a contagem de referência no arquivo será zero.

O que o criador de logs 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 não existir, feche o arquivo de log original, abra um novo e reescreva o mensagem - para que a mensagem não se perca. Mas fazer tudo isso exigiria muito mais complexidade do que o criador de logs do sistema deveria ter - para cada mensagem gravada levará um pouco mais de tempo para ser gravada devido à verificação extra do diretório - que será bem-sucedida sempre que o arquivo for NÃO foi excluído.

Para entender todas as opções acima com mais clareza, o seguinte comando é 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"


4

Esse não é o problema no CentOS 7. Alguém pensou que seria uma ótima idéia ter os logs de correio do postfix para percorrer o journaler. Se você deseja ver os logs do postfix:

journalctl -u postfix

(para ver o log inteiro)

journalctl -u postfix -f

(para ajustar o log)

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

syslog_name = postfix

1
Passei três horas tentando reparar um sistema em que o registro desapareceu. Ainda não encontrei este post, teria passado mais 3 horas. Meu diário tinha 10000 linhas, então esse comando também me ajudou muitojournalctl --vacuum-time=1d
Eugene van der Merwe

2

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.