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

Monitor_stop 方法的工作方式

数据服务样例脱机时,RGM 调用 Monitor_stop 方法以停止 dns_probe 的执行。

本节介绍样例应用程序的 Monitor_stop 方法的主要方面。本节没有介绍所有回调方法通用的功能,例如 parse_args() 函数。本节也没有介绍 syslog() 函数的使用。通用功能在为所有方法提供通用功能中进行介绍。

有关 Monitor_stop 方法的完整列表,请参见Monitor_stop 方法代码列表

Monitor_stop 方法的用途

该方法使用 PMF (pmfadm),以检查探测是否正在运行,如果是则将其停止。

停止监视器

Monitor_stop 方法将使用 pmfadm -q 查看探测程序是否正在运行,如果正在运行,将使用 pmfadm -s 停止该程序。如果探测程序已停止,该方法仍将成功退出,这可以确保该方法的幂等性。


注意 – 注意 –

请确保使用 KILL 信号和 pmfadm 来停止探测,而不应使用可以屏蔽的信号(例如 TERM)。否则,Monitor_stop 方法可能会无限期挂起并最终超时。原因是 PROBE 方法在必须重新启动或故障转移数据服务时调用 scha_control()。作为使数据服务脱机过程的一部分,当 scha_control() 调用 Monitor_stop 时,如果 Monitor_stop 使用可以屏蔽的信号,则 Monitor_stop 将挂起,等待 scha_control() 完成,并且 scha_control() 将挂起等待 Monitor_stop 完成。


# 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

Monitor_stop 退出状态

如果 Monitor_stop 方法无法停止 PROBE 方法,它将记录一条错误消息。RGM 使数据服务样例在主节点上进入 MONITOR_FAILED 状态,这样可以应急该节点。

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