Como logrotate manipula a simultaneidade?

5

No caso de o logrotate ser executado ao mesmo tempo que o arquivo de log está sendo atualizado, o que acontecerá? O novo log será rotacionado em um arquivo de log histórico? Ou ficará no arquivo de log atual?

Obrigado,

    
por johnsam 11.11.2013 / 22:10

1 resposta

10

Durante um log de rotação, as mensagens podem acabar no arquivo antigo ou no novo, mas de forma determinística. Logrotate faz aproximadamente o seguinte para cada arquivo de log:

  1. Renomeie o log para o nome arquivado
  2. Sinalize o aplicativo para reabrir seus registros
  3. Opcionalmente, comprima o arquivo de log

Se as mensagens forem logadas entre 1 e 2, elas terminarão no log renomeado, porque uma renomeação não afeta os descritores de arquivos abertos (também é por isso que a compactação só acontece após aplicativos reabrir seus logs ). Mensagens registradas após 2 terminarão no novo log.

Aqui está um trecho da minha configuração logrotate que faz o que eu descrevi para os logs do nginx:

/var/log/nginx/*.log {
    compress
    delaycompress
    postrotate
        [ ! -f /run/nginx.pid ] || kill -USR1 'cat /run/nginx.pid'
    endscript
}
    
por 11.11.2013 / 22:19