MONITOR_STOP メソッドは、pmfadm -q を使用して検証プログラムが動作しているかどうかを判断し、動作している場合は pmfadm -s を使用して検証プログラムを停止します。検証プログラムがすでに停止している場合でも、このメソッドは成功で終了します。これによって、メソッドが呼び出し回数に依存しないことが保証されます。
# 検証プログラムが動作しているかどうかを判断し、動作している場合、 # 検証プログラムを停止する。 if pmfadm -q $PMF_TAG; then pmfadm -s $PMF_TAG KILL if [ $? -ne 0 ]; then logger -p ${SYSLOG_FACILITY}.err ¥ -t [$SYSLOG_TAG] ¥ "${ARGV0} Could not stop monitor for resource " ¥ $RESOURCE_NAME exit 1 else #検証プログラムの停止に成功。メッセージを記録する。 logger -p ${SYSLOG_FACILITY}.err ¥ -t [$SYSLOG_TAG] ¥ "${ARGV0} Monitor for resource " $RESOURCE_NAME ¥ " successfully stopped" fi fi exit 0 |
検証プログラムを停止するときは、必ず、pmfadm で KILL シグナルを使用するようにしてください。絶対に、マスク可能なシグナル (TERM など) は使用しないでください。そうしないと、MONITOR_STOP メソッドが無限にハングし、結果としてタイムアウトする可能性があります。この問題の原因は、PROBE メソッドがデータサービスを再起動またはフェイルオーバーする必要があるときに、scha_control を呼び出すところにあります。scha_control がデータサービスをオフラインにするプロセスの一部として MONITOR_STOP メソッドを呼び出したときに、MONITOR_STOP メソッドがマスク可能なシグナルを使用していると、MONITOR_STOP メソッドは scha_control が終了するのを待ち、scha_control は MONITOR_STOP メソッドが終了するのを待つため、結果として両方がハングします。