Sun Cluster 資料服務開發者指南 (適用於 Solaris 作業系統)

Monitor_stop 方法如何工作

在資料服務範例置於離線時,RGM 將呼叫 Monitor_stop 方法來停止 dns_probe 的執行。

本小節說明應用程式範例之 Monitor_stop 方法的主要部分。本小節並不說明所有回呼方法的共用功能性,例如 parse_args() 函數。本小節也不說明如何使用 syslog() 函數。為所有方法提供共用功能性說明共用功能性。

如需 Monitor_stop 方法的完整清單,請參閱Monitor_start 方法程式碼清單

Monitor_stop 方法有何作用

該方法使用 PMF (pmfadm) 檢查探測是否正在執行,如果探測正在執行,該方法會將其停止。

停止監視器

Monitor_stop 方法使用 pmfadm -q 查看探測是否正在執行,如果是,則使用 pmfadm -s 來停止探測。如果探測已停止,則該方法無論如何會以成功狀態結束,這樣會保證該方法的等?性。


注意 – 注意 –

請確定透過 pmfadm 使用 KILL 訊號來停止探測,而不要使用可以被遮罩的訊號 (如 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 應該在停止探測之後結束。