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

停止监视器

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 的完成。