ping用のbashスクリプトの作成

ping用のbashスクリプトの作成

こんにちは。次のコマンド ping -c 4 -i "IP"を3回実行するbashスクリプトが必要です。各Pingは10分間隔で実行する必要があり、3回失敗した場合にのみ電子メールが送信されます。助けてください?

前任者。

ping -c 4 -i X.X.X.X

実行タイプ:ping最初にすべてのパケットが失われた場合は、10分間待ってからpingコマンドを再実行してください。それでも失敗した場合は、最後のpingコマンドを実行してください。

#!/bin/bash
HOSTS="X.X.X.X"

pingtest(){
  for myHost in "$@"
  do
    ping -c 4 -i 5 $HOSTS && return 1
  done
  return 0
}

if pingtest $HOSTS
then
  # 100% failed
  echo "Server failed" | mail -s "Server Down" [email protected]

fi

しかし、これを3回繰り返し、パケット損失が失敗した後に電子メールを送信する方法は何ですか?ありがとう

答え1

外部プログラムの使用が許可されている場合は、次のものを使用できます。IPモニタリング。 Cで書かれており、非常に設定可能です。継続的に繰り返し実行されているbashスクリプトまたはcronジョブとは異なり、ping1%未満のCPU時間を消費しながら、毎秒100個のpingを実行できます。

たとえば、次のように使用できます。

sudo ./monitor-ip --interval 5.0 --missed-max 20 --reset -- 1.2.3.4 \
        bash -c 'mail -s "Server Down!" [email protected] <<< "$MONITOR_NOTIFY_REMOTE_ADDRESS unreachable"'

1.2.3.420個の連続フォンが受信されなくなるまで(1分のダウンタイム)、5秒間隔でpingを送信し、次のアドレスに電子メールを送信します。[Eメール保護]。ステータス条件が解決されるまで、1分間隔で電子メールを送信し続けます。

完全な公開:私が書いたIPモニタリング

答え2

以下は、pingの結果を取得する方法の例です。

#!/bin/bash

HOST="X.X.X.X"
WAITFOR=5
TIMES=3

ping $HOST -c $TIMES -i $WAITFOR &> /dev/null
pingReturn=$?

if [ $pingReturn -eq 0 ]; then
    # It works
    echo "Success!!!"
    exit 0
else
    # No access
    echo "Fail"
    exit 1
fi

私が入力したechoステートメントの代わりにあなたの方法を使用して電子メールを送信できます。また、必要な値に設定できる3つの変数HOSTTIMESあります。WAITFORping間隔を10分に設定するには、WAITFOR値に設定する必要があります600

答え3

以下のスクリプトは、次のシナリオに適しています。

 #!/bin/bash
    echo "enter the hostname or IP of the host"
    read h
    ping -c1 $h
    if [ $? != 0 ]
    then
    sleep 6
    ping -c1 $h
    if [ $? != 0 ]
    then
    sleep 6
    ping -c1 $h
    if [ $? != 0 ]
    then
    echo "host $h is not pinging  and its not reachable"
    mail -s "host $h is not pinging  and its not reachable" emailid </dev/null
    else
    echo "host $h is pinging"
    fi
    fi
    fi

関連情報