Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Stoppen der Anwendung

Die Stop-Methode bietet zwei Möglichkeiten zum Stoppen des Datendienstes: eine geordnete oder weiche Art, bei der ein SIGTERM-Signal über pmfadm verwendet wird, und eine plötzliche oder harte Art, bei der ein SIGKILL-Signal eingesetzt wird. Die Stop-Methode ruft den Stop_timeout-Wert ab (den Zeitraum, in dem die Stop-Methode einen Wert zurückgeben muss). Stop weist dann 80% dieser Zeit dem weichen 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_NAMÈ
((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. Ist das der Fall, sendet Stop zunächst mit pmfadm -s ein TERM-Signal zum Beenden des DNS-Prozesses. Wenn dieses Signal den Prozess nach Ablauf von 80% des Zeitüberschreitungswertes nicht beenden konnte, sendet Stop ein SIGKILL-Signal. Wenn auch dieses Signal den Prozess nicht innerhalb von 15% des Zeitüberschreitungswertes beenden kann, protokolliert die Methode eine Fehlermeldung und wird mit 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. Das folgende Codebeispiel zeigt, wie Stop den pmfadm-Befehl zum Stoppen des DNS-Prozesses einsetzt.

# Prüfen, ob if in.named läuft. Falls ja, Beenden erzwingen.
if pmfadm -q $PMF_TAG; then
   # SIGTERM-Signal an den Datendienst senden und 80% des gesamten
   # Zeitüberschreitungswertes warten.
   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} HA-DNS konnte nicht mit SIGTERM gestoppt werden; Mit \
           SIGKILL erneut versuchen”

      # Da der Datendienst mit einem SIGTERM-Signal nicht gestoppt wurde, jetzt
      # SIGKILL verwenden und für weitere 15% des Zeitüberschreitungswertes warten.
      pmfadm -s $PMF_TAG -w $HARD_TIMEOUT KILL
      if [ $? -ne 0 ]; then
          logger -p ${SYSLOG_FACILITY}.err \
          -t [$SYSLOG_TAG]
          “${ARGV0} HA-DNS konnte nicht gestoppt werden; Beenden NICHT ERFOLGREICH”

          exit 1
      fi
fi
else
   # Der Datendienst läuft nun nicht. Meldung protokollieren und mit
   # Erfolg beenden.
   logger -p ${SYSLOG_FACILITY}.err \
           -t [$SYSLOG_TAG] \
           “HA-DNS ist nicht gestartet”

   # Auch wenn HA-DNS nicht läuft, mit Erfolg beenden, damit die Datendienst-
   # ressource nicht in den STOP_FAILED-Zustand versetzt wird.

   exit 0

fi

# DNS konnte erfolgreich gestoppt werden. Meldung protokollieren und mit Erfolg beenden.
logger -p ${SYSLOG_FACILITY}.err \
    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
    “HA-DNS erfolgreich gestoppt”
exit 0