Guide des développeurs pour les services de données Sun Cluster pour SE Solaris

Méthode Stop

La méthode Stop est appelée sur un nœud du cluster lorsque le groupe de ressources contenant la ressource HA-DNS est déconnecté sur ce nœud ou que la ressource est désactivée. Cette méthode arrête le démon in.named (système de nom de domaine) sur ce nœud.


Exemple B–3 Méthode dns_svc_stop

#!/bin/ksh
#
# Méthode d'arrêt de HA-DNS
#
# Arrêtez le service de données à l'aide de la fonction PMF. Si le service ne fonctionne pas
# la méthode se ferme avec l'état 0, le retour de toute autre valeur basculant la ressource en mode 
# STOP_FAILED.


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

###############################################################################
# Annalysez les arguments du programme.
#
function parse_args # [args ...]
{
        typeset opt

        while getopts `R:G:T:' opt
        do
                case “$opt” in
                R)
                        # Nom de la ressource DNS.
                        RESOURCE_NAME=$OPTARG
                        ;;
                G)
                        # Nom du groupe de ressources dans lequel la ressource
                        # est configurée.
                        RESOURCEGROUP_NAME=$OPTARG
                        ;;
                T)
                        # Nom du type de ressources.
                        RESOURCETYPE_NAME=$OPTARG
                        ;;
                *)
                    logger -p ${SYSLOG_FACILITY}.err \
                    -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                    “ERROR: Option $OPTARG unknown”
                     exit 1
                     ;;
                esac
        done

}

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

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

# Obtenez la fonction syslog à utiliser pour consigner les messages.
SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

# Analysez les arguments qui ont été transmis à cette méthode
parse_args “$@”

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

# Obtenez la valeur Stop_timeout à partir du fichier RTR.
STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT -R $RESOURCE_NAME -G \
$RESOURCEGROUP_NAMÈ

# Essayez d'arrêter le service de données de façon ordonnée à l'aide d'un signal SIGTERM
# au moyen de la fonction PMF. Attendez pendant 80% maximum de la valeur Stop_timeout pour
# voir si SIGTERM parvient à arrêter le service de données correctement. Dans le cas contraire, envoyez un signal SIGKILL
# pour arrêter le service de données. Utilisez jusqu'à 15% de la valeur Stop_timeout pour voir si 
# le signal SIGKILL offre les résultats escomptés. Dans le cas contraire, l'arrêt échoue et la méthode se ferme avec un état
# différent de zéro. Les 5% restant de Stop_timeout sont dédiés à une autre utilisation. 
((SMOOTH_TIMEOUT=$STOP_TIMEOUT * 80/100))

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

# Vérifiez si in.named est exécuté. Le cas échéant, interrompez-le. 
if pmfadm -q $PMF_TAG.named; then 
   # Envoyez un signal SIGTERM au service de données et attendez pendant 80% de la
   # valeur totale du délai d'attente.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then 
      logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \
          “${ARGV0} Failed to stop HA-DNS with SIGTERM; Retry with \
           SIGKILL”
      
      # Comme le service de données ne s'est pas arrêté avec le signal SIGTERM, utilisez
      # le signal SIGKILL et attendez pendant 15% de la valeur totale du délai d'attente.
      pmfadm -s $PMF_TAG.named -w $HARD_TIMEOUT KILL
      if [ $? -ne 0 ]; then
          logger -p ${SYSLOG_FACILITY}.err -t [SYSLOG_TAG] \
          “${ARGV0} Failed to stop HA-DNS; Exiting UNSUCCESFUL”
          
          exit 1
      fi   
fi
else 
   # Le service de données n'est plus en cours d'exécution. Consignez un message et 
# quittez avec succès.
   logger -p ${SYSLOG_FACILITY}.info -t [SYSLOG_TAG] \
           “HA-DNS is not started”

   # Même si HA-DNS n'est pas exécuté, quittez avec succès pour éviter de basculer
# le service de données en mode STOP_FAILED.
   exit 0
fi

# Le service de noms de domaine se ferme correctement. Consignez un message et quittez avec succès.
logger -p ${SYSLOG_FACILITY}.info -t [$SYSLOG_TAG] \
    “HA-DNS successfully stopped”
exit 0