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.
#!/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
|