La sonde elle-même est une boucle while infinie de commandes nslookup. Un fichier temporaire est défini avant la boucle while pour recevoir les réponses de nslookup. Les variables probefail et retries sont initialisées à 0.
# Configuration d'un fichier temporaire pour les réponses de nslookup. DNSPROBEFILE=/tmp/.$RESOURCE_NAME.probe probefail=0 retries=0
La boucle while assure les tâches suivantes :
Définit l'intervalle de sommeil de la sonde.
Utilise hatimerun pour démarrer nslookup, passe la valeur Probe_timeout, et identifie l'hôte cible.
Définit la variable probefail sur la base de la réussite ou de l'échec du code de retour de nslookup.
Vérifie si la réponse de nslookup provient du service de données modèle ou d'un autre serveur DNS si probefail a la valeur 1 (échec).
Voici le code de la boucle while.
while : do # L'intervalle d'exécution de la sonde est spécifié dans la propriété # THOROUGH_PROBE_INTERVAL. Par conséquent, configurer la sonde en mode sommeil # pour une durée de THOROUGH_PROBE_INTERVAL. sleep $PROBE_INTERVAL # Exécute une commande nslookup de l'adresse IP servie par le DNS. hatimerun -t $PROBE_TIMEOUT /usr/sbin/nslookup $DNS_HOST $DNS_HOST \ > $DNSPROBEFILE 2>&1 retcode=$? if [ $retcode -ne 0 ]; then probefail=1 fi # S'assurer que la réponse à nslookup vienne du serveur HA-DNS # et non d'un autre serveur de noms mentionné dans le fichier # /etc/resolv.conf. if [ $probefail -eq 0 ]; then # Obtenir le nom du serveur qui a répondu à l'interrogation nslookup. SERVER=` awk ' $1=="Server:" { print $2 }' \ $DNSPROBEFILE | awk -F. ' { print $1 } ' ` if [ -z "$SERVER" ]; then probefail=1 else if [ $SERVER != $DNS_HOST ]; then probefail=1 fi fi fi