私はTracerouteコマンドを使用してWANリンクを監視するのに役立つスクリプトを準備しています。
- トレースパスからプライマリWAN IPを収集し、見つかった場合はプライマリノードが動作していることを通知するスクリプトです。
- プライマリIPが見つからない場合は、トレースパスからセカンダリIPをgrepし、プライマリを下に、セカンダリをUPをエコーします。
- 両方のIPが見つからない場合は、echo PRimaryとセカンダリの両方が閉じます。
似たようなものを用意しましたが、うまくいきませんでした。
echo "`traceroute 4.4.4.4>/tmp/trace.txt`"
grep “1.1.1.1” /tmp/trace.txt &> /dev/null
if [ $? -eq 0 ] ; then
echo “Primary Is UP“
else
grep “2.2.2.2” /tmp/trace.txt &> /dev/null
if [ $? -eq 0 ] ; then
echo “ Primary failed, Secondary Running”
else
echo "Primary & Secondary both failed"
fi
fi
答え1
クイックテストに必要でない場合は、Tracerouteを使用しないでください。レコードパス(-R)オプションを使用してpingを試してください。リクエストを1つだけ作成するには-cオプションを使用し、ルーティングホスト名を解決したくない場合は-nオプションを使用し、失敗するまで待機しない場合は-Wオプションを使用します。たぶん、次のようなものがあります。
if ping -R -n -c1 -W2 4.4.4.4 >/tmp/trace.txt
then
#echo something is up
if grep -q '\<1\.1\.1\.1\>' /tmp/trace.txt
then
echo Primary Is UP
elif grep -q '\<2\.2\.2\.2\>' /tmp/trace.txt
then
echo Primary failed, Secondary Running
else
echo "Primary & Secondary both failed, but something else Running"
fi
else
echo "Primary & Secondary both failed"
fi
履歴パスに準拠するために、1 つ以上のルータを説得する必要がある場合があります。
答え2
echo
スクリプトの最初の行から引用符を削除し、コマンドを残してくださいtraceroute
。スクリプトは次のように書く必要があります。
traceroute ....
grep .....
...