Como o logrotate funciona?

0

Estou tentando monitorar um arquivo de log que roda com freqüência por logrotate. mas eu sou incapaz de conseguir isso corretamente. Alguém pode explicar como realmente funciona o logrotate?

Um arquivo é renomeado e um novo arquivo é criado?

ou é um arquivo copiado com um novo nome e o arquivo atual é esvaziado?

Antes da rotação:

131887 -rw-r--r-- 1 root root  11385 Sep 25 03:40 /var/log/sas.log

Após a rotação:

131887 -rw-r--r-- 1 root root  0 Sep 25 04:40 /var/log/sas.log

131911 -rw-r--r-- 1 root root   11385 Sep  25 04:40 /var/log/sas.log.1
    
por Suriya Vijayaraghavan 07.10.2015 / 08:54

2 respostas

2

Se a opção truncar estiver ativada no arquivo de configuração, o arquivo não será movido - seu conteúdo será copiado apenas para outro arquivo recém-criado e o arquivo atual será limpo, portanto, o ID do inode não será alterado. Na verdade, o arquivo nunca é alterado.

    
por Suriya Vijayaraghavan 30.10.2015 / 11:59
2

Após a rotação, o arquivo de log atual é movido e possivelmente comprimido, se for especificado. Então é criado de novo. [procurando uma fonte diferente da minha experiência]

Isso é um problema se um serviço estiver em execução que tenha o arquivo de log aberto no momento da rotação. O arquivo será desvinculado, mas o espaço em disco não está realmente liberado porque o arquivo ainda está aberto.

É por isso que os serviços geralmente instalam um script de logrotate mais elaborado que manipula a rotação. Como um exemplo, veja o /etc/logrotate.d/nginx definindo o comportamento de rotação para o nginx webserver:

[....]
postrotate
    invoke-rc.d nginx rotate >/dev/null 2>&1
endscript

O bloco postrotate é executado após o novo arquivo de log ter sido criado. Invoca o script de serviço do nginx com rotate informando o serviço para reabrir seu arquivo de log .

    
por Nephente 07.10.2015 / 09:25