電子書籍の厳選無料作品が豊富!

サーバA
192.168.1.201(プライマリ)
192.168.1.203(セカンダリ)

サーバB
192.168.1.202

サーバBより、サーバA(192.168.1.201)へ定期的にPINGの監視をシェルスクリプトで行います。
192.168.1.201より、PINGの返答がない場合は、サーバBがサーバAのプライマリサーバのIPアドレスを
引き継ぎます。(ここまではシェルでうまくできました。)

サーバBはそのまま次にサーバAのセカンダリ(192.168.1.203)に対してPINGを行います。(これは永遠と192.168.1.203より返答がなくなるまで行います。)
そして、192.168.1.203より返答がなくなった場合、サーバBは自身の元のIPアドレスへと戻します。

上記内容を下記のようにシェルスクリプトで作成したのですが、下記のようにすると永遠とネットワークが再起動を繰り返し続けてしまい、困っております。

これを止めるには一体何を足せば良いのでしょうか…。


#!/bin/sh

TARGET_IP='192.168.1.201';

for ip in $TARGET_IP; do
ping $ip -c 4
if [ $? -ne 0 ];
then
echo "PING ERROR"
ifconfig eth0 192.168.1.201
arp -d 192.168.1.201

#ping にて 100% loss があった場合は、コマンド実行です。
#返答があった場合は、そのまま ping させ続けます。
while [ -n "$(ping -c 1 192.168.1.203 | grep 100%)" ]

do
echo "Primary server comes back"
/etc/init.d/networking restart
done

fi;
done

A 回答 (1件)

何をしたいのか今ひとつわかりませんが(条件が逆では?)、



>#ping にて 100% loss があった場合は、コマンド実行です。
>#返答があった場合は、そのまま ping させ続けます。
ということであれば、

while [ -n "$(ping -c 1 192.168.1.203 | grep 100%)" ]
do :
done

echo "Primary server comes back"
/etc/init.d/networking restart
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘頂いた通り、

do
done

の後に実行するコマンドを追加することにより、うまく行きました。

後、grep する文字列が間違っていました。

while [ -n "$(ping -c 1 192.168.1.203 | grep "1 received")" ]

でした…。

お礼日時:2006/12/08 04:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!