ping: mostra apenas resultados

2

É possível mostrar apenas a quantidade de milissegundos durante o ping, em vez de toda a página de resultados?

Quero verificar se meus servidores estão on-line, portanto, quero retornar "OK xyz ms" ou "FAIL". Eu estou fazendo isso da seguinte maneira:

#!/bin/sh
ergebnis=$(ping -qc1 google.com) 
ok=$?
avg=$(echo -e "$ergebnis"  | tail -n1 | awk '{print $4}' | cut -f 2 -d "/")

if [ $ok -eq 0 ]
then
        echo "OK $avg ms"
else
        echo "FAIL"
fi

No entanto, isso usa alguns canais e como eu estou executando esse comando com bastante frequência para monitorar meus servidores, estou querendo saber se existe uma abordagem "mais inteligente". Também tenho medo de que meus pipes não funcionem corretamente quando o comando ping falhar.

    
por mfnalex 06.12.2017 / 13:54

3 respostas

3

Outra variação de awk :

ping -qc1 google.com 2>&1 | awk -F'/' 'END{ print (/^rtt/? "OK "$5" ms":"FAIL") }'
  • -F'/' - tratar a barra / como separador de campos

Exemplo de saída:

OK 47.090 ms
    
por 06.12.2017 / 14:32
3

Não há muito o que fazer com ping , mas você pode fazer todo o processamento no AWK, reduzindo o número de canais, processos, etc.:

ping -qc1 google.com 2>&1 | awk -F/ '/^rtt/ { printf "OK %.2f ms\n", $5; ok = 1 } END { if (!ok) print "FAIL" }'
    
por 06.12.2017 / 14:03
0

Se você não está muito preocupado com a mensagem de erro exata, então que tal

ping  google.com | grep -Po "time.*"
    
por 06.12.2017 / 14:28

Tags