Como funciona o logrotate?

Como funciona o logrotate?

Estou tentando monitorar um arquivo de log que gira frequentemente pelo logrotate. mas não consigo entender 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 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

Responder1

Se a opção truncar estiver habilitada no arquivo de configuração, o arquivo não será movido - seu conteúdo será apenas copiado 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.

Responder2

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

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

É por isso que os serviços geralmente instalam um script logrotate mais elaborado para lidar com a rotação. Como exemplo, veja como /etc/logrotate.d/nginxdefinir o comportamento de rotação para o nginxservidor web:

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

O postrotatebloco é executado após a criação do novo arquivo de log. Ele invoca o script de serviço do nginx informando rotateao serviço parareabrir seu arquivo de log.

informação relacionada