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