Linux: Como verificar quantas linhas foram adicionadas ao arquivo no último segundo?

1

Como posso verificar usando o Linux / Bash quantas linhas foram adicionadas ao arquivo de log selecionado durante, por exemplo, os últimos 10 segundos?

É uma vez usado, não para ser executado em segundo plano. O arquivo não contém informações sobre o tempo.
Eu também não preciso disso arbitrário - > Posso selecionar um momento em que gostaria de acompanhar o número de linhas adicionadas e fazer isso por algum tempo.

Obrigado!

    
por wlk 12.10.2012 / 13:44

4 respostas

3

It's one time use, not on to run in the background. File doesn't contain any information about time.

Então é muito mais difícil, nenhum utilitário faz isso fora da caixa, porque se isso acontecesse, implicaria que ele sabia sobre o conteúdo dos arquivos 10 segundos atrás. Mas, não há nada mágico sobre "10 segundos" que significaria que os dados de gravação são mantidos / armazenados em buffer por tanto tempo (a menos que haja algum log secundário sobre o que escreveu no arquivo de log, e quando).

Sua melhor aposta é:

  • Execute o comando que o Laykes forneceu ou um equivalente como tail -s 10 -f FILE , de modo que ele produza o conteúdo do arquivo em blocos de 10 segundos.
  • Marque o próprio arquivo de registro: echo '-- MARKER --' >> FILE e volte para o que você deseja.

Mas, de qualquer forma, você precisará implementar sua própria solução.

    
por 12.10.2012 / 14:39
0

Você pode configurar um trabalho que registrará o tempo e o número de linhas no arquivo. A maneira alternativa seria inserir o registro de data e hora no arquivo de registro e verificar o número de linhas entre os registros de data e hora.

    
por 12.10.2012 / 14:38
0

Você não pode fazer isso a menos que saiba que precisará fazer isso com antecedência (o que permitiria que você copiasse o arquivo ou fizesse instantâneos do sistema de arquivos na hora certa). Mesmo sistemas de arquivos com versões (que são raros) não registram cada caractere ou linha que muda como ele muda. O melhor que você poderia esperar seria dizer "A última mudança foram esses dados e aconteceu entre o tempo X e o tempo Y".

    
por 12.10.2012 / 14:50
0

Baseado na resposta do Zoredache: parece que timeout também kill pipe, mas você ainda pode encaminhar a saída para algum arquivo temporário e então contar as linhas nele.

timeout 2 tail -f logfile >/tmp/outp ; cat /tmp/outp | wc -l

ou com o relógio

watch -n3 "bash -c 'timeout 2 tail -f logfile >/tmp/outp ; cat /tmp/outp | wc -l'"
rm /tmp/outp
    
por 11.07.2014 / 12:06

Tags