Como o logrotate lida com arquivos abertos? O logrotate pode rotacionar arquivos que um processo abriu?
Como o logrotate lida com arquivos abertos? O logrotate pode rotacionar arquivos que um processo abriu?
Respostas:
Para aqueles aplicativos que não aceitam os sinais do logrotate como Rory descreveu, utilizo alguns métodos.
A decisão de qual deles usar depende do tamanho dos arquivos de log e da necessidade de logs contínuos. Será uma análise de risco da sua parte. No entanto, para dar um exemplo, eu uso uma reinicialização pós-rotação em determinados logs em que eu realmente deveria estar usando um copytruncate. No entanto, os arquivos costumam ter vários shows e a cópia pode demorar bastante tempo, de modo que é preferível perder um ou dois segundos a cada noite.
Parece que eu poderia querer o seguinte, mas ainda interessado na experiência de alguém sobre o assunto:
copytruncate
Truncate the original log file to zero size in place after cre‐
ating a copy, instead of moving the old log file and optionally
creating a new one.
O logrotate enviará o sinal correto ao processo para solicitar a reabertura dos arquivos de log. Funciona imediatamente para coisas como apache ou mysql.
Você pode ver isso no script postrotate do apache. Se você possui seu próprio daemon e deseja que o logrotate funcione com ele, verifique se ele atende a um determinado sinal e reabre os arquivos de log.
Se você não puder alterar o programa, poderá ver se o daemon tem uma maneira de liberar logs automaticamente. Ou adicione uma pré-rotação que interrompa o servidor e uma pós-rotação que o inicia novamente.