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