guiguiabloc
19/07/2009, 20h43
Merci SAP Team - Loup
#!/bin/bash # # Fichier : time_ipfo # Description : Mesure le temps de bascule d'une IP fail over # # Definition des variables TIME=1 T_OUT=3600 CHK=OK VERB="#" # Definition des fonctions # Fonction usage en cas d'erreur de syntaxe usage () { cat << EOF Usage: time_ipfo [-t time] [-T Timeout][-v] -itime_ipfo -h (help) EOF } # Fonction help en cas d option -h help () { usage cat << EOF Mesure le temps de bascule d'une adresse IP FailOver Options : -i : IP Addrs Adresse de bascule a mesurer -t : time Nombre de secondes entre 2 mesures (defaut 1 s) -T : timeout Temps au dela du quel on arrête la mesure (defaut 1 heure) -v : verbose Affichage des messages -h : help Cette page EOF exit 1 } # Fonction usage en cas d'erreur de syntaxe mesure () { if `ping -c 1 -w $TIME $IPFO > /dev/null 2>&1` then let CNT=CNT-1 sleep $TIME CHK=OK else let CNT=CNT-1 CHK=KO fi } # Fonction d affichage en mode verbose printv () { if (( v_opt == 1 )) then printf "$1" fi } # Debut du programmme # Usage si pas d'option if [[ $# == 0 ]] then usage exit 255 fi # Gestion des options while getopts i:t:T:vh OPT do case $OPT in i) i_opt=1 IPFO=$OPTARG ;; t) t_opt=1 TIME=$OPTARG ;; T) T_opt=1 T_OUT=$OPTARG ;; v) v_opt=1 ;; h) help exit 255 ;; ?) usage exit 255 ;; esac done # Boucle de mesure si adresse IPFO renseignée if (( i_opt == 1 )) then let CNT=T_OUT/TIME printv "time_ipfo : Mesure du temps de bascule de l adresse IP $IPFO \n" printv " time=$TIME, timeout=$T_OUT, soit count=$CNT \n" printv " \n" printv "Vous pouvez lancer la procedure de bascule ...\n" while [[ $CNT -gt 1 ]] do mesure if [[ $CHK == KO ]] then printv " \n" printv "L adresse IP $IPFO n est plus joignable, debut mesure\n" DEB=$SECONDS while [[ $CHK == KO ]] && [[ $CNT -gt 1 ]] do mesure printv "." done if [[ $CHK == OK ]] then printv " \n\n" printv "L adresse IP $IPFO est joignable, fin mesure \n" FIN=$SECONDS let NB_S=FIN-DEB printv " \n" printf "L adresse IP $IPFO a mis $NB_S secondes pour basculer \n" exit 0 fi fi done printv " \n" printv "Fin de la mesure la duree de $T_OUT secondes du timeout a ete atteinte\n" else usage exit 255 fi