Sim, existe uma maneira adequada: você não limpa os logs. Você os gira . A rotação envolve alternar a saída do log para um novo arquivo, com o mesmo nome, com os N arquivos de log anteriores mantidos sob um conjunto de N nomes de arquivos relacionados.
A maneira como a pessoa gira os logs depende de como os está gravando. Este é um ponto frequentemente esquecido. Algumas das respostas aqui mencionam, pelo menos, a menção de que alguns programas de registro mantêm um descritor de arquivo aberto para o arquivo de registro, portanto, excluir o arquivo não liberará espaço ou alternará a saída para um novo arquivo de registro.
Se o programa que está gravando o arquivo de log for multilog
do daemontools
pacote , por exemplo, você não fará nada para girar os logs - sem scripts manuais, sem cron
trabalhos. Simplesmente diga multilog
que a saída do log é para um diretório e ele próprio manterá um conjunto de N arquivos de log rotacionados e com tamanho máximo de tamanho nesse diretório.
Se o programa que estiver gravando os arquivos de log for svlogd
do runit
pacote , por outro exemplo, o mesmo se aplica. Você não faz nada além de apontar a ferramenta em um diretório. Ele próprio manterá um conjunto de N arquivos de log rotacionados e com tamanho máximo nesse diretório.
Se você estiver usando rsyslog
para gravar arquivos de log, o programa de log pode ser solicitado a parar após o arquivo atingir um determinado tamanho e executar um script . Você precisa escrever a descrição do script, para renomear o arquivo de log e excluir os arquivos de log antigos com base nas restrições de tamanho total, mas pelo menos o programa de log fechou o arquivo e interrompeu a gravação do log enquanto isso acontecia.
A syslogd
maneira antiga de girar logs, ainda esperada por programas de log como o syslog-ng e exemplificada por ferramentas como as logrotate
mencionadas djangofan
em outra resposta aqui, é um pouco mais casual. É executado um cron
trabalho que renomeia periodicamente os arquivos de log e reinicia o daemon de log (usando o supervisor de daemon em que está sendo executado). O problema disso, é claro, é que ele não impõe um limite de tamanho geral. Em semanas lentas, é possível obter N arquivos de log diários muito pequenos, enquanto em dias de trabalho pode-se obter 1 arquivo de log muito grande que ultrapassa o limite de tamanho.
É por isso que ferramentas melhores e mais recentes gostam multilog
e svlogd
têm opções de configuração de tamanho de arquivo e, na verdade, verificam os tamanhos dos arquivos de log, é claro. O mundo aprendeu que pesquisar os logs em uma programação com cron
trabalhos, ou mesmo um logrotate
daemon, deixa janelas para o tamanho errado, e que o local apropriado para essas verificações é impor rigorosamente limites de tamanho definidos pelo administrador para que a pessoa os arquivos de log nunca engolem a partição em que estão, está no programa que está realmente gravando os arquivos em primeiro lugar.