Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Stoppen der Anwendung

Die Stop-Methode bietet zwei Möglichkeiten zum Stoppen des Datendienstes: einen ordentlichen oder "sanften" Ansatz, bei dem ein SIGTERM-Signal über pmfadm gesendet wird und einen abrupten oder "harten" Ansatz, bei dem ein SIGKILL-Signal verwendet wird. Die Stop-Methode ruft den Stop_timeout-Wert ab (die Zeit, in der die Stop-Methode einen Wert zurückgeben muss). Stop weist dann 80% dieser Zeit dem sanften Stoppvorgang und 15% dem harten Stoppvorgang zu (5% werden zurückgehalten), wie im folgenden Beispiel gezeigt.

STOP_TIMEOUT='scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME'
((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100))
((HARD_TIMEOUT=$STOP_TIMEOUT * 15/100))

Die Stop-Methode verwendet pmfadm -q, um zu überprüfen, ob der DNS-Dämon läuft. Wird der DNS-Dämon ausgeführt, verwendet Stop zuerst pmfadm -s, um ein TERM-Signal zum Beenden des DNS-Prozesses zu senden. Falls dieses Signal den Prozess nach 80 Prozent des Zeitüberschreitungswertes nicht beendet, sendet Stop ein SIGKILL-Signal. Wenn dieses Signal den Prozess ebenfalls innerhalb von 15 Prozent des Zeitüberschreitungswertes beendet, protokolliert die Methode eine Fehlermeldung und wird mit einem Fehlerstatus beendet.

Wenn pmfadm den Prozess beendet, protokolliert die Methode eine Meldung, die besagt, dass der Prozess gestoppt wurde, und wird mit Erfolg beendet.

Wenn der DNS-Prozess nicht läuft, protokolliert die Methode eine diesbezügliche Meldung und wird dennoch mit Erfolg beendet. Im folgenden Code-Beispiel wird dargestellt, wie Stop mit pmfadm den DNS-Prozess stoppt.

# 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 UNSUCCESSFUL”
         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