検証プログラム自身は、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 への応答が /etc/resolv.conf ファイルに指定されているその他の
# ネームサーバーではなく HA-DNS サーバーから返されていることを確認する。
if [ $probefail -eq 0 ]; then
# Get the name of the server that replied to the nslookup query.
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
|