Arquivo especial que mantém apenas as últimas n linhas

0

Existe uma maneira de criar arquivos especiais no Linux que manteria apenas as 100 últimas linhas escritas? Eu tenho um processo preenchendo um arquivo de log e gostaria de analisar regularmente suas 100 últimas linhas.

Eu sei que eu poderia usar algum tipo de logrotate, mas existe uma maneira de criar um arquivo especial que iria encher até atingir 100 linhas, então, adicionar uma linha remove a mais antiga, para que o arquivo mantenha apenas 100 linhas? (uma espécie de FIFO baseado em linhas)

Muito obrigado

    
por Daladim 15.02.2016 / 23:45

3 respostas

0

Os logs são arquivos de texto (como) e são desse tipo, acrescentando novos blocos de disco a eles quando são exigidos por novas linhas é uma ação rápida bem suportada por qualquer sistema de arquivos.

No entanto, constantemente abandonando a primeira linha quando um novo está chegando significaria reorganizar pelo menos alguns, se não todos os blocos do arquivo CONSTANTLY. Isso significaria uma grande sobrecarga dedicada ao registro em log, enquanto uma das características mais importantes que queremos do registro é que ele é leve.

Os sistemas de arquivos não estão preparados para isso (pelo menos eu não ouvi falar sobre este tipo), é por isso que o registro logrotate / tail / database-backed é usado onde os últimos registros são importantes.

    
por 16.02.2016 / 00:37
0

Supondo que você tenha um script que processe apenas as últimas 100 linhas sempre que for executado, essas linhas serão mais bem capturadas com o comando tail , já que faz praticamente o que você deseja fazer. A chave aqui é a opção -n , que determina quantas linhas ela deve capturar, começando do final.

Você pode incorporar tail -n 100 somefile.log diretamente em seu script ou executar periodicamente tail -n 100 somefile.log > onlylast100lines.log para criar um arquivo com apenas as últimas 100 linhas. A última abordagem reescreverá o arquivo de destino toda vez, portanto, não é necessário excluí-lo entre cada execução.

    
por 16.02.2016 / 01:04
0

Elaborando o método Jarmunds, você poderia fazer um script bash como este:

while true; do 
    tail -n 100 somefile.log > onlylast100lines.log
    sleep 5
done

isso iria analisar as últimas 100 linhas de somefile.log em onlylast100lines.log a cada 5 segundos. O arquivo seria sobregravado a cada vez, portanto, seria sempre apenas as últimas 100 linhas. Isto poderia ser adicionado ao seu script de login ou a qualquer runlevel que você quer que isso seja executado.

    
por 16.02.2016 / 09:11