至於上次說自行重啟怕會有問題,所以現在只敢用 rndc flush 把 cache 清掉,這樣查詢不到的 negative cache 也就清掉了,不過這招似乎只對這種偶發性查不到某個特定FQDN有效就是了,若是其他問題應該不會有效果,可能還會因為清掉 cache 造成一點頻寬浪費。
以下是script:
#!/bin/sh
#
# 測試特定的 FQDN 是否查詢得到,若有問題則 log 並 mail
#
DATE=`date "+%Y%m%d %H:%M"`
HOST=`hostname -s`
SERVER=`hostname -f`
LOG=/var/log/named/fqdn_check.log
MAIL="admin@domain.com.tw"
TMPFILE=/tmp/`date "+%Y%m%d%H%M%S"`_fqdn_check.tmp
MAIL_SUBJECT=""
# 要測試的 FQDN
FQDN="www.domian.com.tw."
# 全部要測試的 DNS
DNSLIST="127.0.0.1
dns.hinet.net.
dns.seed.net.tw."
# 若測試任一 FQDN 有問題則設為 1,最後依此變數決定有沒有問題
CHECK=0
# 依序測試 DNLIST 裡的各個 FQDN
for DNS in $DNSLIST
do
echo >> $TMPFILE
echo "# host $FQDN $DNS" >> $TMPFILE
host $FQDN $DNS| grep address >> $TMPFILE
if [ $? -ne 0 ] ; then
CHECK=1
echo $DATE $HOST $FQDN dns query fail: $DNS >> $LOG
MAIL_SUBJECT="$MAIL_SUBJECT$DNS "
fi
done
# 若有任何一個 FQDN 測試有問題,則 E-mail 通知
if [ $CHECK -eq 1 ] ; then
MAIL_SUBJECT="[$HOST] $DATE $FQDN dns query error: $MAIL_SUBJECT"
mail -s "$MAIL_SUBJECT" $MAIL < $TMPFILE
host $FQDN 127.0.0.1| grep address
if [ $? -ne 0 ] ; then
/usr/sbin/rndc flush
fi
fi
rm $TMPFILE