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

MONITOR_STOP メソッド

サンプルのデータサービスがオフラインになるとき、RGM は MONITOR_STOP メソッドを呼び出し、dns_probe の実行を停止します。

この節では、サンプルアプリケーションの MONITOR_STOP メソッドの重要な部分だけを説明します。parse_args 関数や syslog 機能番号を取得する方法など、すべてのメソッドに共通な機能については説明しません。このような機能については、「すべてのメソッドに共通な機能の提供」 を参照してください。

MONITOR_STOP メソッドの完全なリストについては、MONITOR_STOP メソッドのコードリスト」 を参照してください。

MONITOR_STOP の概要

このメソッドは、プロセス監視機能 (pmfadm) を使用して検証プログラムが動作しているかどうかを判断し、動作している場合は検証プログラムを停止します。

検証プログラムの停止

MONITOR_STOP メソッドは、pmfadm -q を使用して検証プログラムが動作しているかどうかを判断し、動作している場合は pmfadm -s を使用して検証プログラムを停止します。検証プログラムがすでに停止している場合でも、このメソッドは成功で終了します。これによって、メソッドが呼び出し回数に依存しないことが保証されます。


# 検証プログラムが動作しているかどうかを判断し、動作している場合、
# 検証プログラムを停止する。
if pmfadm -q $RESOURCE_NAME.monitor; then 
	pmfadm -s $RESOURCE_NAME.monitor KILL
	if [ $? -ne 0 ]; then 
			logger -p ${SYSLOG_FACILITY}.err ¥
				-t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] ¥
				"${ARGV0}: Could not stop monitor for resource " ¥
				$RESOURCE_NAME
        	exit 1
	else
			# 検証プログラムの停止に成功。メッセージを記録する。
			logger -p ${SYSLOG_FACILITY}.err ¥
				-t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] ¥
				"${ARGV0}: Monitor for resource " $RESOURCE_NAME ¥
				" successfully stopped"
	fi
fi
exit 0


注意 - 注意 -

検証プログラムを停止するときは、必ず、pmfadmKILL シグナルを使用するようにしてください。絶対に、マスク可能なシグナル (TERM など) は使用しないでください。そうしないと、MONITOR_STOP メソッドが無限にハングし、結果としてタイムアウトする可能性があります。この問題の原因は、PROBE メソッドがデータサービスを再起動またはフェイルオーバーする必要があるときに、scha_control を呼び出すところにあります。scha_control がデータサービスをオフラインにするプロセスの一部として MONITOR_STOP メソッドを呼び出したときに、MONITOR_STOP メソッドがマスク可能なシグナルを使用していると、MONITOR_STOP メソッドは scha_control が終了するのを待ち、scha_controlMONITOR_STOP メソッドが終了するのを待つため、結果として両方がハングします。


MONITOR_STOP の終了状態

PROBE メソッドを停止できない場合、MONITOR_STOP メソッドはエラーメッセージを記録します。RGM は、主ノード上でサンプルのデータサービスを MONITOR_FAILED 状態にするため、そのノードに障害が発生することがあります。

MONITOR_STOP メソッドは、検証プログラムが停止するまで終了してはなりません。