Sun Cluster 3.1 10/03: Guía del desarrollador de los servicios de datos

Método Stop

El método Stop se invoca en un nodo del clúster cuando el grupo de recursos que contiene el recurso HA-DNS se pone fuera de línea en ese nodo o se inhabilita el recurso. Este método detiene el daemon in.named (DNS) en ese nodo.


Ejemplo B–3 Método dns_svc_stop

#!/bin/ksh
#
# Método Stop para HA-DNS
#
# Detener el servicio de datos con PMF. Si el servicio no está en ejecución
# el método sale con estado 0, porque devolver otro valor pone el recurso
# en estado STOP_FAILED.


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

###############################################################################
# Analizar argumentos de programa.
#
function parse_args # [args ...]
{
        typeset opt

        while getopts `R:G:T:' opt
        do
                case “$opt” in
                R)
                        # Nombre del recurso de DNS.
                        RESOURCE_NAME=$OPTARG
                        ;;
                G)
                        # Nombre del grupo de recursos en el que el recurso
                        # está configurado.
                        RESOURCEGROUP_NAME=$OPTARG
                        ;;
                T)
                        # Nombre del tipo de recurso.
                        RESOURCETYPE_NAME=$OPTARG
                        ;;

                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME]
\
                    “ERROR: Opción $OPTARG desconocida”
                     exit 1
                     ;;

                esac
        done

}


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

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

# Obtener el recurso syslog para utilizar mensajes de registro.
SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

# Analizar los argumentos que se han pasado a este método
parse_args “$@”

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

# Obtener el valor Stop_timeout del archivo RTR.
STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME
-G \ $RESOURCEGROUP_NAMÈ

# Intentar detener el servicio de datos de forma ordenada con una señal SIGTERM
# mediante PMF. Esperar un 80% del valor de Stop_timeout para ver si SIGTERM
# detiene satisfactoriamente el servicio de datos. Si no es así, enviar SIGKILL
# para detener el servicio de datos. Utilizar hasta un 15% del valor de Stop_timeout
# para ver si SIGKILL tiene éxito. Si no, hay un fallo y el método sale con estado
# diferente de cero. El 5% restante del valor Stop_timeout es para otros usos.
((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100))

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

# Consultar si in.named está en ejecución; si es así, terminarlo.
if pmfadm -q $PMF_TAG.named; then
   # Enviar una señal SIGTERM al servicio de datos y esperar un 80% del
   # valor total del tiempo de espera.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \
          “${ARGV0} No se ha podido detener HA-DNS
          con SIGTERM; Reintertarlo con \
          SIGKILL”

      # Dado que el servicio de datos no se ha detenido con una señal SIGTERM,
      # usar SIGKILL ahora y esperar otro 15% del valor del tiempo de espera total.
      pmfadm -s $PMF_TAG.named -w $HARD_TIMEOUT KILL
      if [ $? -ne 0 ]; then
          logger -p ${SYSLOG_FACILITY}.err -t [SYSLOG_TAG]
\
          “${ARGV0} No se ha podido detener HA-DNS;
          Salida NO SATISFACTORIA”

          exit 1
      fi
fi
else
   # El servicio de datos no se está ejecutando actualmente. Registrar
   # un mensaje y salir con resultado satisfactorio.
   logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \
           “HA-DNS no se ha iniciado”

   # Aunque HA-DNS no esté en ejecución, salir con resultado satisfactorio
   # para no poner el recurso del servicio de datos en estado STOP_FAILED.

   exit 0

fi

# Se ha podido detener satisfactoriamente DNS. Registrar un mensaje y salir
# con resultado satisfactorio.
logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
    “HA-DNS se ha detenido satisfactoriamente”
exit 0