La fonction restart_service() est appelée par decide_restart_or_failover () pour tenter de redémarrer le service de données sur le même noeud. Cette fonction exécute la logique suivante :
Détermine si le service de données est toujours enregistré sous le PMF. Si le service est toujours enregistré, la fonction exécute les actions suivantes :
Obtient le nom de la méthode Stop et la valeur Stop_timeout pour le service de données.
Utilise hatimerun pour démarrer la méthode Stop du service de données, en lui passant la valeur Stop_timeout.
Si le service de données est correctement arrêté, obtient le nom de la méthode Start et la valeur Start_timeout pour le service de données.
Utilise hatimerun pour démarrer la méthode Start du service de données, en lui passant la valeur Start_timeout.
Si le service de données n'est plus enregistré sous le PMF, il est très probable qu'il a dépassé le nombre maximum de tentatives autorisées sous le PMF. La fonction scha_control() est appelée avec l'option GIVEOVER pour basculer le service de données sur un autre noeud.
function restart_service { # Pour redémarrer le service de données, vérifiez d'abord que # le service de données lui-même est toujours enregistré sous le PMF. pmfadm -q $PMF_TAG if [[ $? -eq 0 ]]; then # Comme le TAG pour le service de données est toujours enregistré # sous le PMF, arrêtez d'abord le service de données, puis redémarrez-le. # Récupérez le nom de la méthode d'arrêt et la valeur STOP_TIMEOUT # pour cette ressource. STOP_TIMEOUT=`scha_resource_get -O STOP_TIMEOUT \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ STOP_METHOD=`scha_resource_get -O STOP \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ hatimerun -t $STOP_TIMEOUT $RT_BASEDIR/$STOP_METHOD \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME \ -T $RESOURCETYPE_NAME if [[ $? -ne 0 ]]; then logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \ “${ARGV0} Stop method failed.” return 1 fi # Récupérez le nom de la méthode de démarrage et la valeur START_TIMEOUT # pour cette ressource. START_TIMEOUT=`scha_resource_get -O START_TIMEOUT \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ START_METHOD=`scha_resource_get -O START \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAMÈ hatimerun -t $START_TIMEOUT $RT_BASEDIR/$START_METHOD \ -R $RESOURCE_NAME -G $RESOURCEGROUP_NAME \ -T $RESOURCETYPE_NAME if [[ $? -ne 0 ]]; then logger-p ${SYSLOG_FACILITY}.err -t [$SYSLOG_TAG] \ “${ARGV0} Start method failed.” return 1 fi else # L'absence du TAG pour le service de données # implique le service de données a déjà dépassé # le nombre maximum de tentatives autorisées sous le PMF. # Par conséquent, ne tentez pas de redémarrer le # service de données, mais essayez de le basculer # sur un autre noeud dans le cluster. scha_control -O GIVEOVER -G $RESOURCEGROUP_NAME \ -R $RESOURCE_NAME fi return 0 }