timeout ping [RESOLVIDO]

1. timeout ping [RESOLVIDO]

Emerson Piussi
piussi

(usa CentOS)

Enviado em 17/07/2008 - 14:34h

Ola Pessoal!
Gostaria de testar o timeout do comando ping e quando ele for maior que 150ms o script executar algo

mais ou menos assim:

ping -c1 www.xxx.com.br

resposta de xxxxxx: bytes=32 tempo=59ms ttl=42

gostaria de testar o tempo que no exemplo é 59ms, e se este tempo for superior a 150 executar outra tarefa

se alguem puder me ajudar fico grato.




  


2. Re: timeout ping [RESOLVIDO]

Rodrigo Ferreira Valentim
engos

(usa openSUSE)

Enviado em 17/07/2008 - 15:09h

Bem, pelo que entendi seu problema está em conseguir o tempo de resposta, certo?

Tenta colocar algo do tipo no seu script:

TIME=`ping -c1 www.xxx.com.br | awk -F = {'print $4'}`

Com isso sua variavel TIME vai ter o retorno e basta você tratar seu script com ela.

Se precisar de mais ajuda avise...

[]s



3. Re: timeout ping [RESOLVIDO]

Emerson Piussi
PIUSSI

(usa CentOS)

Enviado em 17/07/2008 - 15:52h

valeu Engos, mas para comparar se esta variavel é maior que 150, pois a variavel tera o valor de "51 ms" no caso tem o ms junto.


4. Re: timeout ping [RESOLVIDO]

Rodrigo Ferreira Valentim
engos

(usa openSUSE)

Enviado em 17/07/2008 - 16:15h

Para isso é só filtrar mais uma vez com o awk, ex:

TIME=`ping -c1 www.xxx.com.br | awk -F = {'print $4'} | awk {'print $1'}`


Se precisar de mais ajuda vai pedindo ou me manda um e-mail se eu não lhe responder hoje...


5. Re: timeout ping [RESOLVIDO]

Emerson Piussi
piussi

(usa CentOS)

Enviado em 17/07/2008 - 16:33h

Engos obrigado mais uma vez, olhe o que estou fazendo para testar o valor de time, mas deve estar fazendo algo de errado no teste, pois não funcionou, se puder apontar a minha falha fico grato novamente.

time=`ping -c1 replica.syntesis.com.br | awk -F = {'print $4'} | awk {'print $1'}`

if [ "X$time" -lt 150]; then
faça isto
else
faça aquilo
fi


6. Re: timeout ping [RESOLVIDO]

Rodrigo Ferreira Valentim
engos

(usa openSUSE)

Enviado em 18/07/2008 - 08:34h

Bem, vamos lá...

1o - As funcionalidades aritiméticas do shell são básicas, sendo assim qualquer coisa mais avançada você precisa usar a calculadora básica, ou bc.

2o - Sempre compare números inteiros e nunca reais


Sendo assim você vai precisar algo do tipo:

time=`ping -c1 replica.syntesis.com.br | awk -F = {'print $4'} | awk {'print $1'}`

#Agora você tem um valor que pode ser inteiro, como 150, mas provavelmente vai ser real, como 0.56, por exemplo.

#Primeiramente você precisa passar o valor real para inteiro, ou seja, converter de microsegundos para ms
sTime=`echo "$time * 100" | bc`

#Agora você tem a conversão em ms, mas ainda tem o problema do número ser real, sendo assim você precisa retirar as casas decimais para ficar um número inteiro
timeCompare="$(echo $sTime | sed 's/.00//')"


#Agora sim você pode comparar da forma como você estava fazendo, mas lembre-se que se você quer 150 milesegundos como referência, tem que multiplicar esse valor por 100, devido a conversão que foi feita anteriormente

if [ "$timeCompare" -lt 15000]; then
faça isto
else
faça aquilo
fi


Verifique se funciona desse jeito...


7. Re: timeout ping [RESOLVIDO]

Emerson Piussi
piussi

(usa CentOS)

Enviado em 18/07/2008 - 08:46h

Beleza, valeu muito obrigado