Apache2 e logrotate: delaycompress necessário?

8

Atualmente, estou analisando o tamanho do arquivo dos meus logs do Apache à medida que eles se tornam enormes. Na minha configuração de rotação de log, eu delaycompresshabilitei. O Apache realmente precisa disso (como a documentação do logrotate diz que alguns programas ainda gravam no arquivo antigo) ou é seguro desativá-lo delaycompress?

Aqui está minha configuração de logrotate:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 26 
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            if [ -f /var/run/apache2.pid ]; then
                    /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}
j0nes
fonte

Respostas:

7

Se você estiver reiniciando o Apache (ou mesmo 'graciosamente'), ele fechará os identificadores de arquivos abertos e os abrirá novamente. Você não precisa de delaycompress porque o arquivo foi fechado e reaberto como parte da reinicialização do pós-rotação.

rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)

Uma reinicialização é uma má ideia - e se o arquivo de configuração for alterado acidentalmente e não for mais válido? Seu apache não será iniciado novamente. Em vez disso, envie um HUP para o processo pai, que informa para fechar / reabrir identificadores de arquivo.

postrotate
  /bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript

O gato falhará se o PID estiver ausente (ou vazio ou inválido), causando também a falha da matança, para que você não precise do if..thenbloco ao seu redor.

Martijn Heemels
fonte
YMMV, mas acho que essa é uma boa resposta
asdmin
0

Hrm, neste caso, provavelmente, como o Apache mantém os logs abertos.

Uma coisa que você pode tentar é o rotatelogsscript. Faz parte do apache2-utilspacote, pelo menos aqui na minha estação de trabalho Ubuntu. Outra abordagem seria girá-los diariamente, em vez de semanalmente, para que você faça um buffer menor antes da compactação.

McJeff
fonte
Provavelmente deveria ter adicionado minha configuração de logrotate na pergunta acima - como pós-rotate eu configurei uma reinicialização do apache2.
j0nes