適当にサクっとping確認スクリプトを書いてみる
要件
- 対象IPは、
ip_node.list
に記載する。 -
packet loss
が少しでもあれば、メール通知する。 - ネットワークの設定やメールの設定は終えている。
対象IPリスト
以下の感じで記載しておく。
192.168.11.21
192.168.11.29
192.168.11.69
192.168.11.88
192.168.11.99
スクリプト本体
こんな感じ。
bash
#!/bin/bash
LANG=C;
export LANG;
:> ~/mail.dat;
while read line;do
_RET_=`ping -c 5 -i 1 -w 10 -s 32 ${line} | grep 'loss' | grep -oP '[0-9]+%'`;
echo "${line} ${_RET_} loss";
[ "0%" == "${_RET_}" ] && continue;
echo "${line} ${_RET_} loss" >> ~/mail.dat;
done <~/ip_node.list;
_RET_=`du ~/mail.dat | awk '{print $1}' | xargs expr`;
[ ! 0 -eq ${_RET_} ] && mail -s "IP packet loss alert." -r [from addr] [to addr] < ~/mail.dat;
exit 0;
スクリプト本体(コメント付)
bash
#!/bin/bash
LANG=C;
export LANG; #日本語でPing結果が表示されるとgrepの正規表現が面倒なのでLANG=Cに固定
:> ~/mail.dat; #メール通知用の本文を0byteにする
while read line;do #後述doneの部分で、ファイル入力して$lineに1行ずつ変数入り
_RET_=`ping -c 5 -i 1 -w 10 -s 32 ${line} | grep 'loss' | grep -oP '[0-9]+%'`; #Pingを実施、オプション等はお好みで調整し、gpreでマッチした部分を取得
echo "${line} ${_RET_} loss";
[ "0%" == "${_RET_}" ] && continue; # 0%以外は通知なのでこれでよい
echo "${line} ${_RET_} loss" >> ~/mail.dat; #通知用に書き込み
done <~/ip_node.list;
_RET_=`du ~/mail.dat | awk '{print $1}' | xargs expr`; #通知用のファイルのサイズを取得
[ ! 0 -eq ${_RET_} ] && mail -s "IP packet loss alert." -r [from addr] [to addr] < ~/mail.dat; #0以外であれば、通知
exit 0;