Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 06-03-2019 11:23:17

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

[Resolu] Script ping KO -> mysql stop

Bonjour à toutes et à tous,
Je me permets de vous solliciter car je souhaite mettre en place un script un peu complexe (?) pour moi car je n'y connais rien en scripting.

Le but est de tester une adresse IP externe (google par exemple), et le status de MySQL.
Si ping OK et Mysql Started alors test de la condition dans une minute.
Si ping KO et Mysql Started alors stop mysql et boucle à la condition suivante
Si Ping OK et Mysql Stop alors start Mysql....
Et on recommence le test toutes les minutes.

Voilà j'espère avoir été clair ?...

Merci d'avance pour vos contributions/remarques, suggestions...

PS: je suis debian 9

Merci ;-)

Dernière modification par mrglobule (20-03-2019 10:00:30)

Hors ligne

#2 06-03-2019 11:51:26

vv222
Modérateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.2 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [Resolu] Script ping KO -> mysql stop

C'est le genre de chose qui se fait très bien en shell, et dont tu peux ensuite planifier le lancement toutes les minutes (ou autre intervallede ton choix) avec cron.

Si tu n'as jamais écrit de script avant, je te conseille de découper ton scénario en fonctions (actions) aussi réduites que possible, et ensuite d'imaginer l'algorithme à partir de ces fonctions.

Des exemples de fonctions pourraient être :

  • Est-ce que MySQL est en fonctionnement ?

  • Arrête MySQL



Et un algorithme utilisant ces deux fonctions :

si MySQL fonctionne
alors arrête MySQL



Une fois que tu auras fini de définir ton script de cette façon, l'écriture du code sera grandement facilitée wink


Jouer sous Debian ? Facile !

Hors ligne

#3 06-03-2019 12:24:16

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Merci VV222 pour la réponse je vais mettre ici les bouts de codes et faire mes fonctions alors.

Voilà un bout de script pour vérifier le status de MySQL et relancer au cas où

#!/bin/bash
UP=$(pgrep mysql | wc -l);
if [ "$UP" -ne 1 ];
then
        service mysql start

else
       
fi



if ping -c 1 some_ip_here &> /dev/null
then
  echo 1
else
  echo 0
fi



Pour mémoire/correction

Dernière modification par mrglobule (06-03-2019 15:27:37)

Hors ligne

#4 06-03-2019 14:14:02

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Je sais pas si ça peux aider, mais j'ai fait ça?
190306011816589205.png

Hors ligne

#5 06-03-2019 15:32:13

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Voilà a quoi je pense, mais ça doit être un peu court^^:

#!/bin/bash
if ping -c 5 8.8.8.8 &> /dev/null
then
  service mysql stop
else
  UP=$(pgrep mysql | wc -l);
if [ "$UP" -ne 1 ];
then
    service mysql start

else
       
fi

Hors ligne

#6 06-03-2019 16:37:23

MicP
Membre
Inscription : 29-02-2016

Re : [Resolu] Script ping KO -> mysql stop

Bonjour

Ou plutôt :

#!/bin/bash

if ping -c 5 8.8.8.8 &>/dev/null
then                              # S'il y a eu une réponse au ping
    if ! pgrep mysql &>/dev/null
    then                             # Si mysql n'est pas en cours de fonctionnement
        service mysql start
    fi
else                              # S'il n'y a PAS eu une réponse au ping
    service mysql stop
fi


Dernière modification par MicP (06-03-2019 16:50:43)

Hors ligne

#7 06-03-2019 17:36:05

vv222
Modérateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.2 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [Resolu] Script ping KO -> mysql stop

En fait je conseille d’utiliser des fonctions dans le code pour préserver la lisibilité et faciliter de futures évolutions.
Voici un exemple basé sur le script proposé par MicP :

#!/bin/bash

network_is_up() {
  ping -c 5 8.8.8.8 &>/dev/null
  return $?
}

mysql_is_running() {
  pgrep mysql &>/dev/null
  return $?
}

start_mysql() {
  service mysql start
}

stop_mysql() {
  service mysql stop
}

if network_is_up; then
  if ! mysql_is_running; then
    start_mysql
  fi
else
  if mysql_is_running; then
    stop_mysql
  fi
fi



Ça donne un script plus long, mais je pense que garder la séparation des différents actions jusque dans le code sera un atout quand tu reviendras sur ce script dans quelques mois pour le faire évoluer.

Une version alternative du même code, à toi de voir s’il y en a une que tu préfères :

#!/bin/sh

network_is_up() {
  ping -c 5 8.8.8.8 &>/dev/null
  return $?
}

mysql_is_running() {
  pgrep mysql &>/dev/null
  return $?
}

start_mysql() {
  if ! mysql_is_running; then
    service mysql start
  fi
}

stop_mysql() {
  if mysql_is_running; then
    service mysql stop
  fi
}

if network_is_up; then
  start_mysql
else
  stop_mysql
fi


Jouer sous Debian ? Facile !

Hors ligne

#8 07-03-2019 09:21:54

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Bonjour et un grand merci à vous deux,
Je vais voire le code que je comprends le mieux pour me "l'approprié"^^
Encore merci pour votre contribution.

Hors ligne

#9 07-03-2019 15:05:12

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Merci pour votre aide,
Je suis partis sur ce script (vv222 ;-) )

#!/bin/bash

network_is_up() {
  ping -c 5 X.X.X.X &>/dev/null
  return $?
}

mysql_is_running() {
  pgrep mysql &>/dev/null
  return $?
}

start_mysql() {
  service mysql start | echo "Mail envoye le $(date)" | mail -s "MySQL a redemarre depuis $HOSTNAME" mon@adresse.tld
}

stop_mysql() {
  service mysql stop
}

if network_is_up; then
  if ! mysql_is_running; then
    start_mysql
  fi
else
  if mysql_is_running; then
    stop_mysql
  fi
fi

Dernière modification par mrglobule (07-03-2019 16:05:21)

Hors ligne

#10 07-03-2019 18:44:06

MicP
Membre
Inscription : 29-02-2016

Re : [Resolu] Script ping KO -> mysql stop

Bonjour

Tu as dû confondre le pipe "|"  avec l'opérateur "&&"


Pour le pipe "|"

commnande1 | commande2

la sortie de commande1 est redirigée vers l'entrée de commande2
   <=> tout ce que commande1 afficherait à l'écran (à part les messages d'erreurs)
          sera renvoyé comme une entrée pour la commande2

=======
Pour l'opérateur &&

commande1 && commande2 && commande3

commande3 ne sera exécutée que si le code d'erreur retourné par commande2 est égal à 0 <=> que si commande2 s'est exécutée sans erreur
et
commande2 ne sera exécutée que si le code d'erreur retourné par commande1 est égal à 0 <=> que si commande1 s'est exécutée sans erreur


=======
Donc,
il te faudrait remplacer la ligne :

   service mysql start | echo "Mail envoye le $(date)" | mail -s "MySQL a redemarre depuis $HOSTNAME" mon@adresse.tld

par :

   service mysql start && mail -s "MySQL a redemarre depuis $HOSTNAME" mon@adresse.tld && echo "Mail envoye le $(date)"

ce qui se traduirait par :

Si la ligne de commande service mysql start s'est bien exécutée sans erreur <=> la ligne de commande de démarrage de mysql n'a pas retourné un code d'erreur différent de 0
    alors envoie un mail
             en lançant la ligne de commande :

mail -s "MySQL a redemarre depuis $HOSTNAME" mon@adresse.tld

et ensuite,
Si le mail a bien été envoyé <=> la ligne de commande d'envoi du mail n'a pas retourné un code d'erreur différent de 0
    alors affiche le message "Mail envoye le $(date)"
             en lançant la ligne de commande :

echo "Mail envoye le $(date)"

Dernière modification par MicP (07-03-2019 18:53:06)

Hors ligne

#11 08-03-2019 12:30:37

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Bonjour,
Merci beaucoup MicP, j'ai donc fait évoluer un peu le script (notamment grâce à toi) ;-)

#!/bin/bash
W_is_up() {
  ping -c 5 X.X.W.X &>/dev/null
  return $?
}
Y_is_up() {
  ping -c 5 X.X.Y.X &>/dev/null
  return $?
}
Z_is_up() {
  ping -c 5 X.X.Z.X &>/dev/null
  return $?
}
MON_RESEAU() {
  ip addr | grep 'eth0' | grep 'inet' | cut -d. -f3
  return $?
}
mysql_is_running() {
  pgrep mysql &>/dev/null
  return $?
}

start_mysql() {
  service mysql start && echo "Mail envoye le $(date)" | mail -s "MySQL a redemarre depuis $HOSTNAME" mon@adresse.tld
}

stop_mysql() {
  service mysql stop
}
reso=$(MON_RESEAU)
while true;
do
 if [ $reso -eq Y ]; then
  if W_is_up && Z_is_up; then
    if ! mysql_is_running; then
      start_mysql
    fi
   else
    if mysql_is_running; then
      stop_mysql
    fi
  fi
 elif [ $reso -eq Z ]; then
  if W_is_up && Y_is_up; then
    if ! mysql_is_running; then
      start_mysql
    fi
   else
    if mysql_is_running; then
      stop_mysql
    fi
  fi
 else if Z_is_up && Y_is_up; then
    if ! mysql_is_running; then
      start_mysql
    fi
   else
    if mysql_is_running; then
      stop_mysql
    fi
  fi
fi
done
 

Hors ligne

#12 08-03-2019 13:10:39

MicP
Membre
Inscription : 29-02-2016

Re : [Resolu] Script ping KO -> mysql stop

Bonjour

Comme le code d'erreur retourné par une fonction (ou un script)
est aussi le code d'erreur retourné par la dernière instruction exécutée dans cette fonction (ou ce script)
tu peux supprimer les lignes contenant

return $?

surtout pour la fonction MON_RESEAU() sinon elle ne retournera qu'un code d'erreur
et pas la valeur du 3ème octet de l'adresse IP utilisée par l'interface eth0

Tu pourrais aussi remplacer la ligne de commandes :

ip addr | grep 'eth0' | grep 'inet' | cut -d. -f3


par :

ip addr | grep 'eth0$' | cut -d. -f3

(grep 'eth0$' permet d'afficher la ligne qui se termine par eth0)

Dernière modification par MicP (08-03-2019 13:55:27)

Hors ligne

#13 11-03-2019 11:19:22

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Bonjour,
Un immense merci à toi MicP pour ta correction et ton aide.
Encore merci.

Hors ligne

#14 13-03-2019 14:51:10

vv222
Modérateur
Lieu : Bretagne
Distrib. : GNU/Linux Debian « Sid »
Noyau : Linux ≥ 5.2 (amd64)
(G)UI : Openbox
Inscription : 18-11-2013
Site Web

Re : [Resolu] Script ping KO -> mysql stop

Mon dernier conseil d'amélioration serait de supprimer le "while true" pour en faire un script qui se lance une fois, fait son boulot, puis s'arrête. Ensuite tu peux passer par une solution comme cron pour le lancer à intervales réguliers (toutes les 5 minutes par exemple).

Jouer sous Debian ? Facile !

Hors ligne

#15 20-03-2019 09:58:48

mrglobule
Membre
Distrib. : Jessie
Noyau : Linux 3.16.0-4-amd64
(G)UI : KDE 4.14.2
Inscription : 27-08-2011

Re : [Resolu] Script ping KO -> mysql stop

Merci vv222, je vais prendre ne considération ta remarque.

En tout cas un grand merci pour votre aide.

Hors ligne

Pied de page des forums