Salut,
Je suis en train de bricoler un script (à partir d’un script emprunté à NixCraft) qui est censé vérifier si mes services tournent et m’envoyer un message sur mon ejabberd en cas d’echec.
Voici ou j’en suis:
for t in $ports
do
sname=$(echo $service | cut -d' ' -f$c)
echo -en " $sname\t\t\t : "
echo -en " $sname\t\t\t : " >> $LOG
for r in $RPORTS
do
if [ "$r" == "$t" ]
then
status="YES"
sendjabb=1
break
fi
done
echo -n "$status"
echo ""
echo -n "$status" >>$LOG
echo "" >>$LOG
[ $logtosyslog -eq 1 ] && $LOGGER "$sname service running : $status"
# MAJ compteur
c=$( expr $c + 1 )
status="NO"
done
if [ $sendjabb -eq 1 ];
then
sendxmpp -m $LOG $JABBID
fi
}[/code]
Mon problème est que le script envoie systématiquement un message, même si tous les service fonctionnent…
J’aimerais ne recevoir une alerte que lorsqu’un service tombe…
Voici ce que m’envoie le script sur mon pidgin…
quotetoto@monserveur.tld: -------------------------------------------------------------
Running services status @ admin@monserveur.tld [ mardi 15 mai 2012, 14:32:19 (UTC+0200) ]
SSH : YES
DNS : YES
WEB : YES
MAIL : YES
This is an automatically generated Linux service status notification by /usr/local/bin/watchservices.sh script.[/quote]
if [ "$r" == "$t" ]
then
status="YES"
sendjabb=1
break
fi
Quand le status est à YES sendjabb est à 1.
if [ $sendjabb -eq 1 ];
then
sendxmpp -m $LOG $JABBID
fi
Quand sendjabb est à 1 tu envoie le message.
[code]Running services status @ admin@monserveur.tld [ mardi 15 mai 2012, 14:32:19 (UTC+0200) ]
SSH : YES
DNS : YES
WEB : YES
MAIL : YES
This is an automatically generated Linux service status notification by /usr/local/bin/watchservices.sh script.[/code]
Les status à YES te sont envoyé.
Je vois pas où est le problème entre ton code et ton résultat. Mais je présume que tu voudrait remplacer :
par
(il manquera toujours une initialisation de sendjabb au début)
Salut,
Merci. MisterFreeze est toujours présent quand il y a du script dans l’air…
[quote=« MisterFreez »]
Quand le status est à YES sendjabb est à 1.
Quand sendjabb est à 1 tu envoie le message.[/quote]
Ça j’avais bien percuté. Le truc c’est qu’il y a une boucle, donc plusieurs status.
[quote=« MisterFreez »]Mais je présume que tu voudrait remplacer :
if [ $sendjabb -eq 1 ];
par
if [ $sendjabb -ne 1 ];[/quote]
Ça ne change rien. Service OK ou pas, pas de message envoyé.
La variable $sendjabb reste à 1 même si un service tombe.
j’ai trouvé une solution. Je ne sais pas ce que ça vaut, mais ça fonctionne…
Si tu veux il n’y a aucun lien entre le premier code et ça
Le problème c’est que tu n’initialisais jamais sendjabb.
@M3t4linux > C’est assez proches dans l’idée des sondes nagios et un grand nombre d’entre elles sont faites en perl (les sondes nagios étant utilisées par un paquet de serveur de supervision). Pour en avoir discuté avec des personnes qui y touchent un peu plus. Pour ce genre de sondes, perl est utilisé par défaut, ensuite c’est du C si on a besoin de performance et du shell quand c’est vraiment plus simple/pratique en shell.
Il te manquais des infos, j’avais tronqué le début du script qui contient ça:
[quote]#Counters, set defaults
c=1
status=« »
sendjabb=0[/quote]
Donc, je ne comprend pas trop ce qui déconnait.
Pas grave, ça fonctionne avec ma petite solution…
Quand un service tombe, j’ai un message sur mon compte jabber.
quoteadmin@domaine.tld: -------------------------------------------------------------
Running services status @ serveur.domaine.tld [ mardi 15 mai 2012, 16:35:53 (UTC+0200) ]
Mysql : YES
Monit : NO
Ftp : YES
SSH : YES
Imap : YES
Web : YES
Dns : YES
Mail : YES
-------------------------------------------------------------[/quote]
Il te manquais des infos, j’avais tronqué le début du script qui contient ça:
[quote]#Counters, set defaults
c=1
status=« »
sendjabb=0[/quote][/quote]
Histoire que tu comprenne. Si tu veux qu’il soit initialisé à 0 à chaque itération de la boucle, le mieux c’est de l’initialiser à 0 à chaque itération de la boucle
J’ai finalement du mal à te comprendre.
Si je l’initialise à chaque itération, je vais recevoir une alerte pour chaque service défaillant (si on imagine que tous mes services sont à la ramasse, je vais recevoir autant d’alertes que de services).
Salut,
Merci, ça me rassure. Mon grep sur le log, même s’il n’est pas joli, fait sont travail; C’est le principal.
Vu comment c’est foutu, je ne voyais pas comment mettre l’action dans la boucle de toute façon…