Sun Cluster 3.0 データサービス開発ガイド

STOP メソッドのコードリスト

HA-DNS リソースを含むリソースグループがクラスタノード上でオフラインになるとき、あるいは、HA-DNS リソースが無効になるとき、RGM は STOP メソッドを呼び出します。このメソッドは、そのノード上で in.named (DNS) デーモンを停止します。


例 B-3 dns_svc_stop メソッド

#!/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

# 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