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

Parada de la aplicación

El método Stop proporciona un enfoque en dos hileras para detener el servicio de datos: un enfoque ordenado, o suave, que utiliza una señal de SIGTERM a través de pmfadm, y un enfoque duro o brusco, con la señal de SIGKILL. El método Stop obtiene el valor Stop_timeout (la cantidad de tiempo en el que el método Stop debe volver). Stop asigna entonces el 80 % de este tiempo a una parada suave y el 15 % a una parada brusca (el 5 % queda reservado), como se muestra a continuación.

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))

El método Stop utiliza pmfadm -q para verificar que el daemon de DNS esté en ejecución. Si es así, Stop utiliza primero pmfadm -s para enviar una señal TERM para terminar el proceso de DNS. Si esta señal no logra terminar el proceso pasado un 80 % del valor de tiempo de espera, Stop envía una señal SIGKILL. Si esta señal tampoco puede finalizar el proceso en un 15 % del valor de tiempo de espera, el método registra un mensaje de error y sale con estado de error.

Si pmfadm termina el proceso, el método registra un mensaje que indica que el proceso se ha detenido y sale de forma satisfactoria.

Si el proceso de DNS no está en ejecución, el método registra un mensaje de que no está en ejecución y sale de forma satisfactoria de todas formas. El siguiente ejemplo de código muestra cómo Stop utiliza pmfadm para detener el proceso de DNS.

# Ver si in.named está en ejecución y, en caso afirmativo, terminarlo.
if pmfadm -q $PMF_TAG; then
   # Enviar una señal SIGTERM al servicio de datos y esperar un 80 %
   # del valor total del tiempo de espera.
   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} 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 de tiempo de espera total.
      pmfadm -s $PMF_TAG -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}.err \
           -t [$SYSLOG_TAG] \
           “No se ha podido iniciar HA-DNS”

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

fi

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