Registrar e abrir arquivos

21

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

Kyle Brandt
fonte

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.

Scott Pack
fonte
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. 
Kyle Brandt
fonte
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.

Rory
fonte
Ok, acho que não vai ter os desenvolvedores de fazer isso, mas bom saber o que o padrão é :-)
Kyle Brandt