Dankegon ! Superbe script, c'est le moins que l'on puisse dire.
----- Original Message -----
From: "Christophe HENRY" <[email protected]>
To: [email protected]
Sent: Friday, March 8, 2019 10:53:53 AM
Subject: Re: [graoulug-libre] Script bash
Hello,
J'ai utilisé des variables globales. C'est plus flexible pour la
configuration et les messages d'erreur.
Le script pose un mutex. Ce type de verrou permet d'empêcher l'exécution
du même script plusieurs fois en même temps. Si soucis il y a, tu peux
supprimer le fichier de verrou à la main.
Le ping n'attend qu'une seconde et fait un seul test. Le réseau est
local, la réponse (positive) est forcément rapide. Pas la peine
d'attendre plus.
L'ancien état est mémorisé dans un fichier. Une action n'est entreprise
que s'il y a un changement d'état. Cela permet d'appeler le script
autant de fois que voulu, s'il n'y a rien à faire alors il ne fera
rien. S'il doit le faire, il ne le fera qu'une seule fois à la fois,
grâce au verrou.
Le script se contente d'afficher les commandes qu'il ferait. Tu peux le
lancer sans risque pour tester. Enlève les "echo" par la suite.
""""""""""""""""""""""""""""""""""""""""""""""""""""" script
#!/bin/bash
# Arrêt dès qu'il y a une erreur
set -e
IP="192.168.1.3"
# IP="127.0.0.1" # debug
CONF_FILE="dhcpd.conf"
CONF_SUCCES="dhcp_succes.conf"
CONF_FAILOVER="dhcp_failover.conf"
ancienUp_fichier="/tmp/.ancienUp"
LOCK_FILE="/var/lock/dhcp_failover" # Supprimer si soucis de verrou
[ -f "$CONF_FILE" ] || { echo "$CONF_FILE manquant !" >&2; exit 1; }
[ -f "$CONF_SUCCES" ] || { echo "$CONF_SUCCES manquant !" >&2; exit 1; }
[ -f "$CONF_FAILOVER" ] || { echo "$CONF_FAILOVER manquant !" >&2; exit 1; }
# Verrou : évite que deux lancements du script se marchent dessus.
exec {lock}>"$LOCK_FILE" || exit 1
flock --nonblock "$lock" || { echo "$0 en cours d'exécution !" >&2;
exit 1; }
# En l'absence d'ancien état, on suppose qu'il était positif.
[ -f $ancienUp_fichier ] || { echo -n "SUCCÈS" > $ancienUp_fichier; }
set +e # sinon un échec de ping arrêterait le script
ping -q -c1 -W1 "$IP" >/dev/null
# -c1: un seul essai
# -W1: n'attends qu'une seconde avant d'échouer
if [ $? == 0 ]
then
export up="SUCCÈS"
else
export up="FAILOVER"
fi
set -e
#up="SUCCÈS" # debug
#up="FAILOVER" # debug
# Récupère l'ancien état et le met à jour ensuite
ancienUp=$(cat "$ancienUp_fichier")
echo -n $up > "$ancienUp_fichier"
if [ "$up" != "$ancienUp" ] ;then
echo "Changement: $ancienUp --> $up"
# Changement d'état, il faudra redémarrer le démon,
# choix de la configuration à faire.
if [ $up == "SUCCÈS" ]; then
dhcpConf=$CONF_SUCCES
else
dhcpConf=$CONF_FAILOVER
fi
echo ' cp "$dhcpConf" "$CONF_FILE"'
echo " systemctl restart dhcpd"
else
echo "Aucun changement: $ancienUp == $up"
fi
--
Christophe HENRY
FR EO EN - http://sbgodin.fr
_______________________________________________
libre mailing list
[email protected]
https://brassens.heberge.info/cgi-bin/mailman/listinfo/libre
_______________________________________________
libre mailing list
[email protected]
https://brassens.heberge.info/cgi-bin/mailman/listinfo/libre