Stop 方法提供一個停止資料服務的雙重方法: 透過 pmfadm 使用 SIGTERM 訊號的有序或平穩方法,和使用 SIGKILL 訊號的突然或強制方法。 Stop 方法將獲取 Stop_timeout 值 (Stop 方法必須在此時間範圍內返回)。 Stop 然後將此時間的 80% 分配給順利停止,將此時間的 15% 分配給突然停止 (保留 5%),如以下範例中所示。
STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME \ -G $RESOURCEGROUP_NAM? ((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100)) ((HARD_TIMEOUT=$STOP_TIMEOUT * 15/100))
Stop 方法使用 pmfadm -q 來 確認 DNS 常駐程式是否正在執行。 如果此常駐程式正在執行,Stop 將會首先使用 pmfadm -s 來發送 TERM 訊號,以終止 DNS 程序。 如果該訊號在 80% 的逾時值之後仍無法終止程序,則 Stop 將發送 SIGKILL 訊號。 如果該訊號在 15% 的逾時值時間範圍內亦無法終止程序,則該方法將會記錄錯誤訊息,並以錯誤狀態退出。
如果 pmfadm 終止了程序,則方法將記錄一條程序已停止的訊息並以成功狀態退出。
如果 DNS 程序未在執行,則方法會記錄一條程序未在執行的訊息並無論如何會以成功狀態退出。 以下程式碼範例顯示了 Stop 如何使用 pmfadm 來停止 DNS 程序。
# See if in.named is running, and if so, kill it. if pmfadm -q $PMF_TAG; then # Send a SIGTERM signal to the data service and wait for 80% of the # total timeout value. pmfadm -s $RESOURCE_NAME.named -w $SMOOTH_TIMEOUT TERM if [ $? -ne 0 ]; then logger -p ${SYSLOG_FACILITY}.err \ -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \ “${ARGV0} Failed to stop HA-DNS with SIGTERM; Retry with \ SIGKILL” # Since the data service did not stop with a SIGTERM signal, use # SIGKILL now and wait for another 15% of the total timeout value. pmfadm -s $PMF_TAG -w $HARD_TIMEOUT KILL if [ $? -ne 0 ]; then logger -p ${SYSLOG_FACILITY}.err \ -t [$SYSLOG_TAG] “${ARGV0} Failed to stop HA-DNS; Exiting UNSUCCESFUL” exit 1 fi fi else # The data service is not running as of now. Log a message and # exit success. logger -p ${SYSLOG_FACILITY}.err \ -t [$SYSLOG_TAG] \ “HA-DNS is not started” # Even if HA-DNS is not running, exit success to avoid putting # the data service resource in STOP_FAILED State. exit 0 fi # Could successfully stop DNS. Log a message and exit success. logger -p ${SYSLOG_FACILITY}.err \ -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \ “HA-DNS successfully stopped” exit 0 |