Comment puis-je envoyer une requête ping à une liste d'adresses IP trouvées dans une base de données mysql depuis bash?
J'ai une table appelée nics contenant ces champs:
Voici comment j'ai construit mon application de surveillance (la partie qui utilise les messages ICMP pour récupérer un hôte actif). Dans mon cas, le serveur mysql (MariaDB) s'exécute sur le même ordinateur que l'application.
Dans ce cron, je n'utilise que 2 champs (ipv4 et icmp). Le champ icmp est utilisé pour déterminer si ces informations doivent être surveillées ou non.
voici le script:
#!/bin/bash
#variables
SQL_U=username
SQL_P=password
SQL_D=database
mysql -u ${SQL_U} -p${SQL_P} -D ${SQL_D} -e "SELECT ipv4 FROM nics WHERE icmp=1;" | while IFS=$'\t' read ipv4;
do
if [ "$ipv4" != "ipv4" ]; then
PING_IP=$ipv4
PING_LOSS=0
PING_TEST=$(fping -c 1 -p 20 ${PING_IP} | awk '{ print $1 }')
if [ "$PING_TEST" = "$PING_IP" ]; then
PING_LOSS=1
fi
PING_C=$(date +"%Y-%m-%d %H:%M:%S")
mysql -u ${SQL_U} -p${SQL_P} -D ${SQL_D} -e "INSERT INTO ping (ipv4, loss, created, modified) VALUES ('${PING_IP}', '${PING_LOSS}', '${PING_C}', '${PING_C}');"
fi
done
Tous les résultats sont insérés dans une table appelée ping. Dans lequel j'insère l'ip, le résultat ping en binaire (0 = perte, 1 = reçu), date de création et de modification. Avec ce script, je peux surveiller environ 100 ips (pour l’instant) toutes les 5 minutes et collecter des statistiques.Assurez-vous que j’utilise fping au lieu de faire un ping sur une machine stretch Debian. En raison de ses nombreuses fonctionnalités.