HA-DNS リソースを含むリソースグループがクラスタノード上でオフラインになるとき、あるいは、HA-DNS リソースが無効になるとき、RGM は Stop メソッドを呼び出します。このメソッドは、そのノード上で in.named (DNS) デーモンを停止します。
#!/bin/ksh # # HA-DNS の Stop メソッド # # このメソッドは、PMF を使用するデータサービスを停止する。サービス # が動作していない場合、このメソッドは状態 0 で終了する。その他の値 # は戻さない。リソースは STOP_FAILED 状態になる。 #pragma ident “@(#)dns_svc_stop 1.1 00/05/24 SMI” ############################################################################### # プログラム引数を構文解析する。 # function parse_args # [args ...] { typeset opt while getopts `R:G:T:' opt do case “$opt” in R) # DNS リソースの名前。 RESOURCE_NAME=$OPTARG ;; G) # リソースが構成されているリソース # グループの名前。 RESOURCEGROUP_NAME=$OPTARG ;; T) # リソースタイプの名前。 RESOURCETYPE_NAME=$OPTARG ;; *) logger -p ${SYSLOG_FACILITY}.err \ -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \ “ERROR: Option $OPTARG unknown” exit 1 ;; esac done } ############################################################################### # MAIN # ############################################################################## export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH # メッセージの記録に使用する syslog 機能番号を取得する。 SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY` # このメソッドに渡された引数を構文解析する。 parse_args “$@” PMF_TAG=$RESOURCE_NAME.named SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME # RTR ファイルから Stop_timeout 値を取得する。 STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME -G \ $RESOURCEGROUP_NAMÈ # PMF 経由で SIGTERM シグナルを使用する規則正しい方法でデータサービ # スを停止しようとする。SIGTERM がデータサービスを停止できるまで、 # Stop_timeout 値の 80% だけ待つ。停止できない場合、SIGKILL を送信 # して、データサービスを停止しようとする。SIGKILL がデータサービス # を停止できるまで、Stop_timeout 値の 15% だけ待つ。停止できない場合、 # メソッドは何か異常があったと判断し、0 以外の状態で終了する。 # Stop_timeout の残りの 5% は他の目的のために予約されている。 ((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100)) ((HARD_TIMEOUT=$STOP_TIMEOUT * 15/100)) # in.named が動作しているかどうかを調べて、動作していれば停止する。 if pmfadm -q $PMF_TAG.named; then # SIGTERM シグナルをデータサービスに送信して、合計タイムアウト値 # の 80% だけ待つ。 pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM if [ $? -ne 0 ]; then logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \ “${ARGV0} Failed to stop HA-DNS with SIGTERM; Retry with \ SIGKILL” # SIGTERM シグナルでデータサービスが停止しないので、今度は # SIGKILL を使用して、合計タイムアウト値の 15% だけ待つ。 pmfadm -s $PMF_TAG.named -w $HARD_TIMEOUT KILL if [ $? -ne 0 ]; then logger -p ${SYSLOG_FACILITY}.err -t [SYSLOG_TAG] \ “${ARGV0} Failed to stop HA-DNS; Exiting UNSUCCESFUL” exit 1 fi fi else # この時点でデータサービスは動作していない。メッセージを記録して、 # 成功で終了する。 logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \ “HA-DNS is not started” # HA-DNS が動作していない場合でも、成功で終了し、データサービス # リソースが STOP_FAILED 状態にならないようにする。 exit 0 fi # DNS の停止に成功。メッセージを記録して、成功で終了する。 logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \ “HA-DNS successfully stopped” exit 0 |