LoginSignup
0
0

More than 3 years have passed since last update.

適当にサクっとping確認スクリプトを書いてみる

Posted at

適当にサクっと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;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0