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/nginx
definir o comportamento de rotação para o nginx
servidor web:
[....]
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
O postrotate
bloco é executado após a criação do novo arquivo de log. Ele invoca o script de serviço do nginx informando rotate
ao serviço parareabrir seu arquivo de log.