Eu tenho um aplicativo linux que grava continuamente as informações de log em um arquivo de log, por exemplo. /var/log/application.log
. Como o aplicativo não gira o arquivo automaticamente, esse arquivo de log pode atingir um tamanho de gigabytes em algumas semanas, então eu quero poder girar esse arquivo corretamente
Minha principal preocupação aqui é que, para rodar um arquivo que é aberto pelo aplicativo o tempo todo, provavelmente terei que:
Mova o arquivo para sua forma rotacionada
/var/log/application.log -> /var/log/application.log.2013-01-28
Crie um vazio
/var/log/application.log
. Obs: Neste ponto, o processo de inscrição ainda está gravando no/var/log/application.log.2013-01-28
Altere o descritor de arquivo do processo do aplicativo para apontar novamente para
/var/log/application.log
Então, eu estou certo? Se sim, como posso fazer isso? (principalmente a alteração da parte do descritor de arquivo)
Se não sou, qual é a maneira correta e como fazê-lo?
dup2
o novo descritor sobre o antigo, em seguida, feche o novo descritor.)Respostas:
Escreva uma
logrotate
configuração para usarcopytruncate
fonte
A maioria desses aplicativos responde a um sinal, como
SIGHUP
, e irá fechar e reabrir seus arquivos de log após a recepção do sinal. Verifique a documentação do seu aplicativo para o sinal correto a ser enviado.fonte