Sun Cluster Entwicklerhandbuch Datendienste für Solaris OS

Stop-Methode

Die Stop-Methode wird auf einem Cluster-Knoten aufgerufen, wenn die Ressourcengruppe, welche die HA-DNS-Ressource enthält, auf diesem Knoten offline gebracht bzw. wenn die Ressource deaktiviert wird. Diese Methode stoppt den in.named (DNS)-Dämon auf dem Knoten.


Beispiel B–3 dns_svc_stop-Methode

#!/bin/ksh
#
# Stopp-Methode für HA-DNS
#
# Stoppt den Datendienst mithilfe von PMF. Wenn der Dienst nicht läuft, wird die
# Methode mit Status 0 beendet, da die Rückgabe eines anderen Wertes die
# Ressource in STOP_FAILED-Zustand versetzt.


#pragma ident   “@(#)dns_svc_stop   1.1   00/05/24 SMI”

###############################################################################
# Programmargumente analysieren.
#
function parse_args # [args ...]
{
        typeset opt

        while getopts `R:G:T:' opt
        do
                case “$opt” in
                R)
                        # Name der DNS-Ressource.
                        RESOURCE_NAME=$OPTARG
                        ;;
                G)
                        # Name der Ressourcengruppe, in der die Ressource
                        # konfiguriert ist.
                        RESOURCEGROUP_NAME=$OPTARG
                        ;;
                T)
                        # Name des Ressourcentyps.
                        RESOURCETYPE_NAME=$OPTARG
                        ;;

                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]\
\
                    “FEHLER: Option $OPTARG unbekannt”
                     exit 1
                     ;;
                esac
        done

}

###############################################################################
# MAIN
#
##############################################################################

export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH

# syslog-Funktion aufrufen, mit der Meldungen protokolliert werden.
SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

# Argumente analysieren, die an diese Methode übergeben wurden
parse_args “$@”

PMF_TAG=$RESOURCE_NAME.named
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

# Stop_timeout-Wert aus der RTR-Datei abrufen.
STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME -G \
$RESOURCEGROUP_NAMÈ

# Versuchen, den Datendienst unter Verwendung eines SIGTERM
# -Signals über PMF ordnungsgemäß zu stoppen. Bis zu 80% des Stop_timeout-Werts
# warten, um zu sehen, ob SIGTERM den Datendienst erfolgreich stoppen kann. Andernfalls
# SIGKILL senden, um den Datendienst zu stoppen. Bis zu 15% des Stop_timeout-Wertes
# warten, um zu sehen, ob SIGKILL erfolgreich ist. Andernfalls ist ein Fehlschlag
# aufgetreten, und die Methode wird in einem Nicht-Null-Status beendet.
# Die restlichen 5% von Stop_timeout werden für andere Zwecke verwendet.
((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100))

((HARD_TIMEOUT=$STOP_TIMEOUT * 15/100))

# Überprüfen, ob in.named läuft. Falls ja, Abbruch erzwingen.
if pmfadm -q $PMF_TAG.named; then
   # SIGTERM-Signal an den Datendienst senden und bis zu 80% des
   # gesamten Zeitüberschreitungswertes warten.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \
          “${ARGV0} HA-DNS konnte nicht mit SIGTERM gestoppt werden; Wiederholen mit \
           SIGKILL”

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

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

   # Auch wenn HA-DNS nicht läuft, wird mit Erfolg beendet, damit der Datendienst
   # nicht in einen STOP_FAILED-Zustand versetzt wird.

   exit 0
fi

# DNS erfolgreich gestoppt. Meldung protokollieren und mit Erfolg beenden.
logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
    “HA-DNS erfolgreich gestoppt”
exit 0