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 |