#!/bin/sh
#
# 測試特定的 FQDN 是否查詢得到,若有問題則自動重啟並 mail
#
DATE=`date "+%Y%m%d %H:%M"`
HOST=ns
SERVER=ns.domain.net
LOG=/var/log/ns_check.log
MAIL="admin@ns.domain.net"
# 全部要測試的 FQDN
FQDNLIST="ns.domain.net. www.hinet.net."
# 若測試任一 FQDN 有問題則設為 1,最後依此變數決定有沒有問題
CHECK=0
# 依序測試 DNLIST 裡的各個 FQDN
for DN in $FQDNLIST
do
host $DN | grep address
if [ $? -ne 0 ] ; then
CHECK=1
echo $DATE $HOST dns query fail: $DN >> /tmp/$HOST_ns_check.tmp
echo $DATE $HOST dns query fail: $DN >> $LOG
fi
done
# 若有任何一個 FQDN 測試有問題,則重啟 DNS 並 E-mail 通知
if [ $CHECK -eq 1 ] ; then
mail -s "[$HOST] $DATE dns query error" $MAIL < /tmp/$HOST_ns_check.tmp
rm /tmp/$HOST_ns_check.tmp
/sbin/service named stop
sleep 3
/sbin/service named start
fi
只是可能還是有些問題很難避免,像是如果有問題寄信 E-mail 位址也查詢不到那自然信也寄不出來(寫死 smtp server ip 在 /etc/hosts或是 script 直接用 ip 寄?);或是問題是自動重啟也無法解決時,那丟在 crontab 裡剛好就讓它一直不斷重啟=.= 難道要另外將一定時間內重啟次數寫入另一個檔案作 check 嗎?另外還有一些機器不知道為什麼有時用 service named restart 或 stop/start 會有問題沒辦法正常重啟,這也很麻煩,難道真的得寫個迴圈重複 stop 好幾次或是非得暴力動用 kill -9 不可嗎?@_@
不知道有沒有更好的方法?(應該還有動用高級 content switch 以外的方法吧?)
沒有留言:
張貼留言