検証プログラム自身は、nslookup(1M) コマンドの while による無限ループです。while ループの前に、nslookup の応答を保管する一時ファイルを設定します。probefail 変数と retries 変数は 0 に初期化されます。
# nslookup 応答用の一時ファイルを設定する。 DNSPROBEFILE=/tmp/.$RESOURCE_NAME.probe probefail=0 retries=0 |
検証プログラム用の休眠期間を設定する。
hatimerun(1M) を使用し、nslookup に Probe_timeout の値とターゲットホストを渡して起動する。
nslookup の戻りコード (成功または失敗) に基づいて、probefail 変数を設定する。
probefail が 1 (失敗) に設定された場合、nslookup への応答がサンプルのデータサービスから来ており、他の DNS サーバーから来ているのではないことを確認する。
次に、while ループコードを示します。
while :
do
# 検証が動作すべき期間は THOROUGH_PROBE_INTERVAL プロパティに指
# 定されている。したがって、THOROUGH_PROBE_INTERVAL の間、検証
# プログラムが休眠するように設定する。
sleep $PROBE_INTERVAL
# DNS がサービスを提供している IP アドレス上で nslookup コマンド
# を実行する。
hatimerun -t $PROBE_TIMEOUT /usr/sbin/nslookup $DNS_HOST $DNS_HOST ¥
> $DNSPROBEFILE 2>&1
retcode=$?
if [ $retcode -ne 0 ]; then
probefail=1
fi
# nslookup への応答が HA-DNS サーバーから来ており、
# /etc/resolv.conf ファイル内に指定されている他のネームサーバー
# から来ていないことを確認する。
if [ $probefail -eq 0 ]; then
# nslookup 照会に応答したサーバーの名前を取得する。
SERVER=` awk ' $1=="Server:" { print $2 }' ¥
$DNSPROBEFILE | awk -F. ' { print $1 } ' `
if [ -z "$SERVER" ]; then
probefail=1
else
if [ $SERVER != $DNS_HOST ]; then
probefail=1
fi
fi
fi
|