roaima o aponta corretamente no comando timeout
, e head
na verdade termina depois de ter lido o número desejado de linhas, então eu espero que com
timeout 600s tail -f ‹logfile› | ‹filter› | head -n 1000
você chegaria lá.
Eu tenho um arquivo de log que eu processo da seguinte forma:
grep pattern /var/log/whatever.log | \
cut ... | sort | uniq -c | sort -rn | \
etc....
No entanto, o arquivo de log é bastante grande e registra eventos desde o início do dia. Também é acrescentado constantemente. Gostaria de processar apenas os últimos próximos 10 minutos do arquivo.
Estou procurando algo como o seguinte:
killafter 600 tail -f /var/log/whatever.log | stuff
Ou melhor ainda (espere o tempo necessário para capturar 1000 linhas correspondentes):
tail -f /var/log/whatever.log | grep pattern | stopafter -lines 1000 | stuff
Existe alguma ferramenta que me permita fazer isso?
roaima o aponta corretamente no comando timeout
, e head
na verdade termina depois de ter lido o número desejado de linhas, então eu espero que com
timeout 600s tail -f ‹logfile› | ‹filter› | head -n 1000
você chegaria lá.
Por padrão, o tempo limite mata o processo e o canal é eliminado.
timeout --foreground 600s tail -n 0 -f logfile | ...filter | head -n 1000| ...
timeout --foreground
senão veríamos apenas "Terminado" tail -n 0 -f
para mostrar apenas as novas linhas de log head -n 1000
para "parar após 1000 linhas" \ thanks {roaima e Ulrich Schwarz}
Este código perl
fornecerá um % contadotail
#!/usr/bin/perl
#
# Usage tailmax.pl <filename> [<num_lines>]
#
use strict;
use warnings;
use File::Tail;
my $logfile = shift @ARGV;
my $pattern = shift @ARGV || '';
my $count = shift @ARGV || -1;
my $fh = File::Tail->new(name => $logfile, tail => 0, interval => 0, maxinterval => 2) or
die "Cannot open $logfile: $!\n";
while ($count != 0 and defined (my $line = $fh->read)) {
if ($pattern eq '' or $line =~ /$pattern/) {
print "$line";
$count-- if $count > 0;
}
}
Se você salvá-lo em um arquivo como /usr/local/bin/tailmax
e torná-lo executável, poderá chamá-lo assim, o que fornecerá as próximas 100 mensagens do arquivo de log /var/log/messages
que contêm o RE somepattern
. (Você pode precisar de root
para ler este arquivo.)
tailmax /var/log/messages 'somepattern' 100
Tags tail