Sun Cluster 数据服务开发者指南(适用于 Solaris OS)

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 停止该程序。 如果探测程序已停止,该方法仍将成功退出,这可以确保该方法的幂等性。


# See if the monitor is running, and if so, kill it. 
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
         # could successfully stop the monitor. Log a message.
         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 使用可屏蔽信号,它将挂起,等待 scha_control() 的完成,且 scha_control() 也将挂起,等待 Monitor_stop 的完成。


Monitor_stop 退出状态

如果 Monitor_stop 方法无法停止 PROBE 方法,它将记录一条错误消息。 RGM 将使数据服务样例在主节点上处于 MONITOR_FAILED 状态,此操作可能会影响该主节点。

在探测程序停止之前,Monitor_stop 不应退出。