Existe alguma maneira de manter o tamanho do arquivo de log fixo, sem rotacioná-lo por um novo arquivo vazio e excluir (ou arquivar) o arquivo antigo. Por exemplo, se eu definir o tamanho máximo do arquivo de log como 1 MB, depois que o tamanho do arquivo aumentar além desse limite, ele será automaticamente fixado, o texto será adicionado em 'cauda' e a parte mais antiga do texto será exibida para manter o tamanho do arquivo 1 MB .
13
rm -f *.tar.gz.*
Respostas:
Você pode escrever um pequeno script bash para fazer isso. Basta ajustar o arquivo para uma determinada contagem de bytes usando
tail -c
e substituindo o arquivo.de
man tail
:fonte
Sua única solução pode ser escrever seu próprio sistema de arquivos do espaço do usuário ou contribuir com um existente. Veja a lista parcial em Sistema de arquivos no espaço do usuário
Se você não tem as habilidades necessárias para contribuir, ofereça uma publicidade ao projeto ou $$$ ou ambos, para adicioná-lo.
Eu gostaria de ter tempo para fazer isso, eu sempre quis algo exatamente assim.
fonte
Você pode fazer algo semelhante usando um FIFO, que é como um arquivo de tamanho de zero byte.
No entanto, observe que, se nada estiver LENDO neste arquivo, o processo do syslog poderá ficar bloqueado e interromperá a gravação em TODOS os seus arquivos de log. Não tenho certeza se esse comportamento foi alterado nas versões mais recentes do Ubuntu / CentOS.
Um exemplo aqui
Para outro exemplo, tente algo como isto.
Faça seu FIFO:
E adicione isso ao (r) syslog.conf e reinicie o syslog:
Em seguida, visualize o FIFO em uma janela:
E em outra janela, envie algumas coisas para o syslog:
Você deve ver as linhas "Teste *" na saída
cat
acima.Esse recurso pode ser ótimo para depuração, especialmente se você não quiser manter os dados por mais tempo. Por exemplo, se você quiser ver tudo, exceto o spam de firewall, poderá fazer algo assim:
fonte
Aqui está a minha segunda resposta. Isso é muito hackish.
Use watch (1) para executar repetidamente
tail --bytes=1024
(os últimos 1024 bytes do arquivo de log, obrigado a @jjclarkson para essa resposta).E então veja o arquivo com:
A diferença entre
watch
e um loop while é quewatch
apenas atualizará /tmp/messages.watch se houver alterações em / var / log / messages.E bem, acho que você poderia colocar um
test
loop while para que a cauda só seja executada se / var / log / messages for atualizada, mas não vou descobrir isso agora.fonte
https://groups.google.com/group/mod.sources/browse_thread/thread/b2136b3ab7e924e/f785b37c218bb576?hl=pt_BR&ie=UTF-8&q=prune+log+file&pli=1
Muitos daemons (a maioria? Todos?) Reabrirão seus arquivos de log se receberem um sinal HUP (por exemplo, pela mesma tarefa cron que executa remoção)
fonte
Estou certo de que o pôster original encontrou uma solução após 8 anos. Aqui está outro para outros que podem ler este tópico ...
O corte reduz o tamanho da saída de um programa e preserva os últimos 200 MB de saída com o seguinte comando:
run_program | curtail -s 200M myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
fonte