RGM 在某叢集節點上呼叫資源類型實作的 Stop 回呼方法以停止應用程式。Stop 方法的回呼語義要求以下因素︰
Stop 方法必須是等冪的,因為即使 Start 方法未在節點上成功完成,RGM 也可以呼叫 Stop 方法。因此,,Stop 方法也必須成功 (以 0 值結束),即使應用程式目前未在叢集節點上執行,並且無作業可執行。
如果資源類型的 Stop 方法在叢集節點上失敗 (以非 0 值結束),則試圖停止的資源會進入 STOP_FAILED 狀態。依據資源上的 Failover_mode 設定,此情況可能導致 RGM 執行叢集節點的強制重新啟動。
因此,您必須設計 Stop 方法以便此方法一定可以停止應用程式。如果應用程式無法終止,您可能更需要使用 SIGKILL 以突然結束應用程式。
由於架構將 Stop_timeout 特性的過期視為停止失敗,並因而將資源置於 STOP_FAILED 狀態,因此您還必須確保此方法及時停止應用程式。
DSDL 公用程式 scds_pmf_stop() 在首次嘗試使用 SIGTERM 平緩停止應用程式時,應滿足多數應用程式。然後,此函數將 SIGKILL 傳送至程序。此函數會假定應用程式使用 scds_pmf_start() 在 PMF 下啟動。請參閱PMF 函數,以取得有關此公用程式的詳細資訊。
假定用於停止應用程式的應用程式特定函數名為 svc_stop(),按如下所示實作 Stop 方法︰
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Initialization Error */ } return (svc_stop(handle));
之前 svc_stop() 函數的實作是否包含 scds_pmf_stop() 函數是不相關的。決定是否包含 scds_pmf_stop() 函數要取決於應用程式是否使用 Start 方法在 PMF 下啟動。
由於即使系統目前遇到問題,Stop 方法應嘗試在此節點上停止應用程式,因此,svc_validate() 方法不用於 Stop 方法的實作。