こんにちは。次のコマンド
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ジョブとは異なり、ping
1%未満の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.4
20個の連続フォンが受信されなくなるまで(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つの変数HOST
がTIMES
あります。WAITFOR
ping間隔を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