自動でPINGを打って失敗したらmailをくれるスクリプト

サーバーの設定をしていると、とにかく重要なのが公開したサーバーの監視だということに気付いた。
クラウドでいくつかサーバーを立てているが、1日1回のlogwatchでは日中にサーバーが落ちたりすると気付けないという問題にブチ当たってしまった。

とりあえずサーバーの反応があるのかないのかを自動化できれば、まぁ気付けるんじゃないかと思いcronにシェルスクリプトをブチ込んで様子を見ることにしてみた。
なのでまずはシェルスクリプトのお勉強から…。

とりあえずこちらのサイトを参考にこんなものを書いてみました。

#!/bin/sh
IP_ADDR_ARRAY=("192.168.0.1");

NUM=0
for IP in ${IP_ADDR_ARRAY[@]}
do
  ping ${IP} -c 1 >> /dev/null
  if [ $? == 0 ] ;
  then
    echo "${IP} : OK"
  else
    echo "${IP} : NG" | mail -s "*** Alert: PING error. ***" root
  fi
  NUM=`expr ${NUM} + 1`
done

内容的には

対象:192.168.0.1
行動:対象サーバーへ1回PINGを打つ
結果:失敗した場合、rootへ「*** Alert: PING error. ***」というタイトルのメールを送る

という感じです。
赤字の部分は適宜書き換えることでイケるかと思います。
IPの所はサーバーネームでもイケるのかな…。試してないけど。

あとはこれをcron.hourlyに実行させれば1時間に1回pingを打って、失敗したらメールをくれるようになるハズです。

…メールが来ないことを祈るばかりです。

あわせて読みたい

3件のフィードバック

  1. 通りすがり より:

    この場合、変数のNUMは不要かと。。。

  2. 通りすがり より:

    その他、気になった点としては、
    ・代入する値(この場合はIPアドレス)が一つなら、for文を使う必要もないかと。。。
    ・失敗した時だけアクション(この場合メール通知)が必要なら、成功した場合のアクション「echo “${IP} : OK”」も不要かと。。。

  3. admin318 より:

    にゃー、このサイト全然見てませんでした
    遅くなりまして申し訳ありません。

    このスクリプト自体、何も分からない状態の時に何処ぞより持ってきたスクリプトを自分なりに改編したものなので、今見るとすごいムダがありますね( ;∀;)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)