私が見つけた最良の方法は、-O フラグを使用することでした (すべてのディストリビューションで機能するわけではないことに注意してください - 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
マニュアルページから:
-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 はうまくいきませんでした... 私の場合、ほとんどの場合、これを見たいのは基本的にサーバーの再起動中です... これは Windows ではうまく機能します...
私は簡単なスクリプト (@entropo の回答を拡張) を作成して、この質問への回答に役立つ可能性があります:
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
使い方は次のようなものです:
シェル スクリプトでホストが起動しているかどうかを確認するために ping を使用するときは、次のようにします。
ping -W 1 -c 1 $HOST 2>&1 > /dev/null || (echo -n "dead!"; false) && command-that-needs-host-to-be-up
基本的に、出力なしで 1 秒でタイムアウトする 1 つの ICMP を送信し、終了コードを使用してさらなるアクションを制御します。