自宅にサーバーを立てている場合に、ふとしたときに自宅サーバーへアクセスできず困ることがあります。
せめてアクセスできないのが事前にわかればと思い、簡易的な監視スクリプトを作ってみました。
要件としては、
- 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かでアラートメールを発砲することが可能かと思います。