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

Méthode Arrêt

La méthode Arrêt est appelée sur un noeud du cluster lorsque le groupe de ressources contenant la ressource HA-DNS est déconnecté sur ce noeud 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 noeud.


Exemple B–3 Méthode Arrêt_svc_dns

#!/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 ÉCHEC_ARRÊT.


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

###############################################################################
# Arguments d'analyse 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 Délai_arrêt à partir du fichier RTR.
DÉLAI_ARRÊT=`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 Délai_arrêt 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 Délai_arrêt 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 Délai_arrêt 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 ÉCHEC_ARRÊT.

   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