自宅にサーバーを立てている場合に、ふとしたときに自宅サーバーへアクセスできず困ることがあります。

せめてアクセスできないのが事前にわかればと思い、簡易的な監視スクリプトを作ってみました。

要件としては、

  • ping監視
  • 複数サーバーを監視できる
  • 実行の都度アラートを飛ばすのではなく、すでにアラートが飛んでいれば新たに発砲しない。

こういった簡易的な監視スクリプトで結構重要なのが3つ目だったりします。

都度都度メールが送られてくるのはウザイので、監視間隔を延ばすという対応はよくあるかと思いますが、下記スクリプトのように、一度メールを飛ばしたらtmpディレクトリへtmpファイルを作ることで、次回チェック時はそのtmpファイルがある場合はスルーするようにしてあります。

その後で、復活時にtmpファイルを削除することで、再度障害が発生した場合に対応できるようにしております。

#!/bin/bash

NUM01=3
IPLIST="ここに対象サーバーのIPアドレスをスペース区切りで記述する";
MAILTO="メールの通知先アドレスを記述する";

### PING check
for IPL in ${IPLIST}
do
 ping ${IPL} -c ${NUM01}
 if [ $? -eq 1 ];then
  if [ -e /tmp/pingfile${IPL}.tmp ];then
    echo "TMP file already exsists";
  else
    touch /tmp/pingfile${IPL}.tmp
    cat /root/maildata.txt | mail -s"[ALERT]Network is unreachnable to ${IPLIST}" ${MAILTO}
  fi
 else
  rm -f /tmp/pingfile${IPL}.tmp
 fi
done

exit 0

/root直下にmaildata.txtというファイル名で、メール本文へ記述するアラートの内容を作っておけばあとは

*/30 8-23 * * * /root/kanshi.sh

のようにcronへ登録しておけばバッチリです。

実際はデータベースなどにステータスを保存しておいて、そこを参照したりするのが理想ですが、それについてはまた今度。

このスクリプトを応用することで、pingだけではなく、他のスクリプトの返り値0か1かでアラートメールを発砲することが可能かと思います。