Tracerouteコマンドの出力をキャプチャするbash /シェルスクリプトを作成します。

Tracerouteコマンドの出力をキャプチャするbash /シェルスクリプトを作成します。

私は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 .....
...

関連情報