Gire um arquivo que está aberto e sendo escrito em todos os momentos

10

Eu tenho um aplicativo linux que grava continuamente informações de log em um arquivo de log, por exemplo. %código%. Como o aplicativo não gira o arquivo automaticamente, esse arquivo de log pode atingir um tamanho de gigabytes em algumas semanas, portanto, quero poder girar esse arquivo corretamente

A minha principal preocupação aqui é que para rodar um ficheiro que é aberto pela aplicação a todo o momento, provavelmente precisarei de:

  1. Mova o arquivo para o formato girado /var/log/application.log

  2. Crie um /var/log/application.log -> /var/log/application.log.2013-01-28 vazio. Obs: Neste ponto, o processo do aplicativo ainda está sendo gravado em /var/log/application.log

  3. Altere o descritor de arquivo do processo do aplicativo para apontar novamente para /var/log/application.log.2013-01-28

Então, estou certo? Se sim, como posso fazer isso? (principalmente a alteração da parte do descritor de arquivo)

Se eu não sou, qual é a maneira correta e como fazer isso?

    
por Bruno Polaco 28.01.2013 / 23:28

2 respostas

11

Escreva uma logrotate config para usar copytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.
    
por 29.01.2013 / 01:14
1

A maioria desses aplicativos responde a um sinal, como SIGHUP , e fecha e reabre seus arquivos de registro no recebimento do sinal. Verifique a documentação da sua aplicação para o sinal correto a ser enviado.

    
por 28.01.2013 / 23:31