當資料服務範例離線時,RGM 將呼叫 Monitor_stop 方法來停止 dns_probe 的執行。
本節說明應用程式範例的 Monitor_stop 方法之主要部分, 但未說明如為所有方法提供共用功能性中所描述的所有回呼方法的共用功能性,如 parse_args() 函式與獲取 syslog 工具。
如需 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 方法無法停止 PROBE 方法,則前者會記錄一條錯誤訊息。 RGM 會在主要節點上將資料服務範例置於 MONITOR_FAILED 狀態,這樣可能會使該節點發生混亂。
Monitor_stop 應該在停止探測之後結束。