La meilleure chose que j'ai trouvée était d'utiliser le drapeau -O (Notez que cela ne fonctionne pas sur toutes les distributions - en utilisant Linux Mint 17.1 Rebecca IPUTILS-PING 3:20121221-4ubuntu1.1)
$ ping -O 10.10.5.1
64 bytes from 10.10.5.1: icmp_seq=53 ttl=245 time=460 ms
no answer yet for icmp_seq=54
64 bytes from 10.10.5.1: icmp_seq=55 ttl=245 time=265 ms
64 bytes from 10.10.5.1: icmp_seq=56 ttl=245 time=480 ms
no answer yet for icmp_seq=57
64 bytes from 10.10.5.1: icmp_seq=58 ttl=245 time=348 ms
64 bytes from 10.10.5.1: icmp_seq=59 ttl=245 time=515 ms
no answer yet for icmp_seq=60
64 bytes from 10.10.5.1: icmp_seq=61 ttl=245 time=320 ms
64 bytes from 10.10.5.1: icmp_seq=62 ttl=245 time=537 ms
À partir de la page de manuel :
-O Report outstanding ICMP ECHO reply before sending next packet.
This is useful together with the timestamp -D to log output to a
diagnostic file and search for missing answers.
fping n'a pas fonctionné pour moi... Dans mon cas, la plupart du temps, je veux voir que c'est essentiellement lors du redémarrage du serveur... cela fonctionne plutôt bien sous Windows...
Je construis un script simple (développant @entropo answer) pour m'aider à ce sujet, ce qui peut aider à répondre à cette question :
https://gist.github.com/brunobraga/7259197
#!/bin/bash
host=$1
if [ -z $host ]; then
echo "Usage: `basename $0` [HOST]"
exit 1
fi
while :; do
result=`ping -W 1 -c 1 $host | grep 'bytes from '`
if [ $? -gt 0 ]; then
echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;31mdown\033[0m"
else
echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $host is \033[0;32mok\033[0m -`echo $result | cut -d ':' -f 2`"
sleep 1 # avoid ping rain
fi
done
Et l'utilisation est quelque chose comme :
Lorsque j'utilise ping pour voir si un hôte est activé dans les scripts shell, je fais quelque chose comme ceci :
ping -W 1 -c 1 $HOST 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-host-to-be-up
Fondamentalement, envoie un ICMP qui expire en une seconde sans sortie et utilise le code de sortie pour déclencher d'autres actions.