Registrar e abrir arquivos


21

Como o logrotate lida com arquivos abertos? O logrotate pode rotacionar arquivos que um processo abriu?

Respostas:


7

Para aqueles aplicativos que não aceitam os sinais do logrotate como Rory descreveu, utilizo alguns métodos.

  1. Use a opção copytruncate
  2. Adicione uma instrução pós-rotação para reiniciar o serviço

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.


Desculpe pelo atraso, mas acho que pude economizar algum tempo para outras pessoas que procuram esse problema. Dê uma olhada em outra abordagem para resolver isso. unix.stackexchange.com/a/122942/189725
Victor

17

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. 

1
É como fazer "cp something.log something.log.1;:> something.log" para que o arquivo fique vazio, mas a manipulação do arquivo não seja interrompida. O problema é o tempo entre os 2 comandos, você poderia perder alguma linha de toras
raio de

5

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.


Ok, acho que não vai ter os desenvolvedores de fazer isso, mas bom saber o que o padrão é :-)
Kyle Brandt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.