pingで一瞬に生死ノードを確認する
特定範囲のノードをpingで確認する方法。
特定範囲のホストの場合
fpingが使える場合は、fpingを使うと便利です。
$ fping -a -g 192.168.0.0/24
fpingが使えない場合は、ちょっと強引ですがfor文で回して生成します。
$ (for i in $(seq 1 254); do (TARGET=192.168.0.$i && ping -nq -c 1 -W 1 ${TARGET} >/dev/null 2>&1 && echo ${TARGET}) & done;)|sort -t. -nk 4
追記
for文を使わない別回答。
但しfor文使った方がパフォーマンスは良いです。
$ seq 1 254 | sed -e "s/^/192.168.0./" | xargs -I '{}' sh -c '(ping -nq -c 1 -W 1 {} >/dev/null 2>&1 && echo {}) &' | sort -t. -nk 4
チェックするノードのリストが存在する場合
チェックするノードのリストが存在する場合は次のように行います。
生存しているノードを調べる
fpingが使える場合は、パイプで渡してあげるだけでチェックできます。
$ cat hosts.txt | fping -a
fpingが使えない場合、
$ cat hosts.txt | xargs -I '{}' sh -c '(ping -nq -c 1 -W 1 {} >/dev/null 2>&1 && echo {}) &' | sort -t. -nk 4
死んでいるノードを調べる
リストが存在する時は大抵の場合、死んでいるノードの方を調べたいと思います。
fpingを使う場合は、-uを指定するだけで応答が無いノードを出力できます。
$ cat hosts.txt | fping -u
fpingを使わない場合は、次の通りです。&&を||に置き換えています。
$ cat hosts.txt | xargs -I '{}' sh -c '(ping -nq -c 1 -W 1 {} >/dev/null 2>&1 || echo {}) &' | sort -t. -nk 4