shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Dúvida em relação a um fluxo de script que exige retorno do 'whois'


From: rapha.couto
Subject: Re: Dúvida em relação a um fluxo de script que exige retorno do 'whois'
Date: Wed, 12 Sep 2012 17:34:21 -0000
User-agent: eGroups-EW/0.82

Esqueci de dizer. Se vc colocar a chamada direto no script, depois to timeout o 
próprio script será finalizado, por isso joga a chamada em um subshell.

#!/bin/bash
TIMEOUT=10
while read ip;
do
  (ulimit -t $TIMEOUT; whois $ip)
done < /tmp/ip.txt

Pelo que eu vi, no caso de ultrapassar o timeout o comando irá retornar o 
codigo 137, caso queira tratar.

--- Em address@hidden, "rapha.couto" <rylphs@...> escreveu
>
> Tenta usar:
> 
> ulimit -t segundos
> 
> Isso deve restringir o tempo de CPU dos comandos do shell atual.
> 
> --- Em address@hidden, Alexandre Mulatinho <alex@> escreveu
> >
> > Bom dia,
> > 
> > Depois de quase uma hora arranjei uma 'solução alternativa':
> > 
> > *#!/bin/bash
> > TIMEOUT=10
> > while read ip;
> > do
> >     whois $ip &
> >     pid=$!
> >     (sleep $TIMEOUT; kill $pid) &
> >     wait $pid
> > done < /tmp/ip.txt*
> > 
> > Só que aí ele tentara dar kill mesmo nos processos que passaram com sucesso
> > e não demoraram/pararam.
> > 
> > Daí pensei em fazer uma gambiarra para resolver isso, só que aí ele iria
> > demora horas rodando, o que não me parece interessante justamente porque
> > estamos implementando um timeout para agilizar a execução do script, então
> > a 'gambi' ficou assim:
> > *
> > #!/bin/bash
> > TIMEOUT=10
> > while read ip;
> > do
> >         whois $ip &
> >         pid=$!
> >         sleep 2
> >         if [ -f /proc/${pid}/status ]; then
> >                 (sleep $TIMEOUT; kill $pid) &
> >                 wait $pid
> >         fi
> > done < /tmp/ip.txt
> > 
> > *Se alguém tiver alguma solução melhor, desde já eu agradeço,
> > Alexandre Mulatinho.
> > 
> > Em 12 de setembro de 2012 08:49, Alexandre Mulatinho
> > <alex@>escreveu:
> > 
> > > Fala turma,
> > >
> > > Bom dia! Tô com uma dúvida para melhorar a performance de um script e
> > > gostaria da ajuda de vocês.
> > >
> > > Tenho a situação em que recebo uma lista de IPs (1000+) e começo a fazer
> > > WHOIS para saber o ISP deles, é mais ou menos assim:
> > > *
> > > while read IP;
> > > do
> > >   whois $IP | grep informacoes uteis.. | sed ...
> > > done < lista_de_IPs.txt
> > > *
> > > O script funcionava muito bem mas depois que ele foi migrado para uma
> > > máquina nova ele passou a parar no whois, imagino eu que seja um problema
> > > de rede, mas não gostaria de 'aperriar' a turma de redes com isso, queria
> > > então fazer o seguinte:
> > >
> > > 1) rodar o whois
> > > 2) verificar se esse whois ta demorando mais do que 30 segundos
> > > 2.1) se sim, dar um kill no processo e continuar
> > > 2.2) caso nao, continuar normal
> > >
> > > Pensei em algo assim:
> > > *whois $IP &
> > > ret=$!
> > > trap "echo kill -15 $ret" 2 # Será que tem algum trap pra esperar X
> > > minutos ?
> > > wait $ret*
> > >
> > > Claro, isso funcionaria se eu fosse danto CTRL+C, só que o script roda sem
> > > controle do usuário via cron então não é a solução, não sei se eu
> > > conseguiria neste loop guardar o pid do processo em um arquiivo e fazer um
> > > check nos arquivos que estao demorando mais de 30 segundos para sumirem e
> > > dar kill, bom, acho que tbm não deve ser a melhor situação e por isso
> > > gostaria de pedir a ajuda de vocês para descobrir uma solução mais 
> > > decente.
> > >
> > > Desde já agradeço,
> > >
> > > --
> > > Atenciosamente,
> > > *Alexandre Mulatinho*
> > >
> > 
> > 
> > 
> > -- 
> > Atenciosamente,
> > *Alexandre Mulatinho*
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]