#######################################
## Grep infinito
##
## Descricao:
## realiza um grep infinito em um arquivo, util para se acompanhar
## um log de alguma ferramenta
## Trabalha em loop infinito, para sair tecle control-c
##
## Entradas: palavra - arquivo - tempo de atualizacao
## Saidas: linhas com o padrap na saida padrao
##
## autor: Evaldo Avelar Marques agosto - 2009
## versao: 1.0
##
########################################
#!/bin/bash
#verifica o padrao
if [ -z $1 ]; then
echo "Padrao não foi informado! ";
exit 2;
else
padrao=$1;
fi
#verifica o arquivo
if [ -z $2 ];then
echo "Arquivo nao foi informado! ";
exit 2;
#checa se o arquivo existe
elif [ ! -f $2 ] ;then
echo "Arquivo nao existe! "
exit 2;
#checa se arquivo esta vazio
elif [ ! -s $2 ] ;then
echo "Arquivo esta vazio! "
exit 2;
else
log=$2;
fi
#verifica o contador de tempo
if [ -z $3 ];then
tmp=5;
else
tmp=$3;
fi
while : ;
do
grep $padrao $log ;
sleep $tmp;
done;
############### Fim ##########################3
[1] Comentário enviado por neyfrota em 31/08/2009 - 04:59h
cara.. eu nao testei nao... mas... se entrar uma linha com LOGIN no arquivo.. pelo que percebi... vai ficar sendo cuspida na tela de 6 em 6 segundos... fora que ta "grepando" o arquivo inteiro de 6 em 6 segundos... em arquivos grandes isso vai ser um terror. Melhor dar um tail e "pipar" pra um grep... assim fica em tempo real....
[2] Comentário enviado por cenoura em 31/08/2009 - 08:26h
Este script não gera muito I/O para arquivos muito grandes ao ficar rodando um grep nele todo a cada 6 segundos?
Acredito que a sugestão do comentário [1] (o "tail -f arquivo|grep padrao") é uma solução melhor e que é atualizada num tempo menor que os 6 segundos.
[4] Comentário enviado por neyfrota em 31/08/2009 - 17:20h
faz assm:
- bota o seu programa, pra receber <ARQUIVO> e <PADRAO>
- faz ele verificar arquivo e padrao
- manda ele dar um greep no <arquivo> como <padrao> (mostrar o passado)
- inicia tail-f com pipe pro grep <padrao> (passa mostrar presente e futuro)
por seguranca... o primeiro grep (do passado) tasca em vez de grep puro (que vai ver o arquivo todo... o que vai ser terrivel nos logs grandoes de 25mb) ... anda com tail tb.. mais lendo seila.. (um chute) ... as ultimas 10.000 linas....
tail -n 10000 <ARQUIVO> | grep <PADRAO>
assim quando chamar o programa.. ele olha no passado (ate 10.000 linhas no passado) e passa a verificar em tempo real (tail -f) ... assim fica realmente pratico...