Sun Cluster: Guía del desarrollador de los servicios de datos del sistema operativo Solaris

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; Reintentarlo 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 is not started”

   # 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