Script pour reboot le routeur

Forum dédié aux questions concernant la configuration de votre serveur sous Linux
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Script pour reboot le routeur

Message par bartras »

Bonjour à tous,

J'utilise un raspberry pi 3 sur lequel tourne Domoticz.
Il est connecté via ethernet à un routeur 4G (modèle TP LINK MR6400).

De temps en temps, le routeur n'a plus accès à internet.
Souvent il s'agit de micro coupure (< 30 sec) et ce n'est pas gênant.
Mais parfois (comme hier soir), c'est plein de coupure à la suite ( > 3 min)...

Je peux le constater depuis le ping (8.8.8.8 google) que j'ai sous Domoticz (refresh toutes les 5 sec):
Sans titre.png
Sans titre.png (55.73 Kio) Consulté 1137 fois


Pour résoudre ça, j'éteins manuellement le routeur et le rallume.


Je voudrais mettre en place un script (soit sur le raspberry, soit via les événements de Domoticz) qui ferait ça:

- surveille le device ping Google
- si OFF plus de 3 minutes en continu
- alors reboot du routeur TP-Link via le réseau


Pour ce qui est du routeur, j'ai vu que par telnet sous Windows j'ai accès à une commande "dev reboot".

Ma question, est ce qu'on peut faire quelque chose d'équivalent sous raspbian ?

Merci d'avance pour votre aide.
Je vais continuer à chercher de mon côté aussi.
Dernière modification par bartras le 22 mars 2023, 12:54, modifié 2 fois.
jpcheney
Messages : 21
Inscription : 26 janv. 2022, 11:51

Re: Script pour reboot le routeur

Message par jpcheney »

Comme je le vois :
un script lancé par cron toutes les minutes

- test si connexion sur 8.8.8.8 (attention a tester aussi un autre serveur, j'ai un script qui test ce genre de chose et je me connecte sur 2 serveurs pour etre sur)
si ko, faire un touch sur un fichier dans /tmp (si ce fichier n'existe pas) sinon, tester la date de ce fichier et si date > 3 mn, lancer la commande de reboot
si ok, supprimer ce fichier

voila comme je le vois
tu veux un exemple de script ou ca te suffit ?
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: Script pour reboot le routeur

Message par bartras »

Merci pour ton retour rapide.

Pour l'instant j'en suis là :

Code : Tout sélectionner

#!/bin/bash

# Ping les adresses 8.8.8.8 et 1.1.1.1
ping -c 1 8.8.8.8 > /dev/null
ping1=$?
ping -c 1 1.1.1.1 > /dev/null
ping2=$?

if [ $ping1 -ne 0 ] && [ $ping2 -ne 0 ] && [ ! -f "ping_nok" ]; then
  sudo touch ping_nok
elif [ $ping1 -ne 0 ] && [ $ping2 -ne 0 ] && [ -f "ping_nok" ] && [ $(find ping_nok -mmin +3) ]; then
  echo "reboot routeur"
else
  sudo rm -f ping_nok
fi
Existe t il une adresse DNS dont le ping échoue volontairement pour que je teste le cas où ça ne marche pas ? (ma question peut paraitre bête je m'en excuse) ?

Et je continue de plancher pour me connecter en ssh à mon routeur pour le redémarrer.
jpcheney
Messages : 21
Inscription : 26 janv. 2022, 11:51

Re: Script pour reboot le routeur

Message par jpcheney »

- pour ta question sur le ping, si ton reseau local est en 192.168.1.x par exemple, tu peux pinguer 192.168.2.1, ca devrait planter
- sinon, j'utilises plutot nc pour tester une connexion : des fois, le dns 8.8.8.8 ne repond pas aux ping alors qu'il est toujours actif
- si tu as le choix entre telnet et ssh, prefere telnet (pas securisé mais en reseau local ...), plus facile a utiliser. sinon, faudra regarder sur les clés ssh ou sur un truc genre ssh-askpass

et comme je vois que tu sais ecrire un shell, un peu de code pour t'inspirer ;-)

Code : Tout sélectionner

#!/bin/sh

#180 = 3 mn
NB_SECONDES_ATTENTE=180

IP_ROUTER="192.168.1.1"

telnet_adsl_restart(){
	#commandes a passer (a adapter)
	echo "open "$IP_ROUTER
        sleep 1
        echo "dev reboot"
        sleep 1
        echo "exit"
}

#un fichier lock pour ne pas avoir deux process en meme temps
if [ -f /var/run/surv_rezo.lock ]
then
        exit 3
fi

touch /var/run/surv_rezo.lock

#on test plusieurs fois une connexion sur google puis sur free
compteur=0
while [ $compteur -lt 5 ]
do
	#test www.goole.com
	nc -w 1 -z www.google.com 443
	resultat=$?
	if [ $resultat -eq 0 ]
	then
		compteur=5
	else
		compteur=$(expr $compteur + 1)
	fi
	sleep 1
done


if [ $resultat != 0 ]
then
	compteur=0
	while [ $compteur -lt 5 ]
	do
		#test www.free.fr
		nc -w 1 -z www.free.fr 443
		resultat=$?
		if [ $resultat -eq 0 ]
		then
			compteur=5
		else
			compteur=$(expr $compteur + 1)
		fi
	done
	sleep 1
fi

#pas de connexion
if [ $resultat = 1 ]
then
	#pas de fichier de date
	if [ -f /tmp/testdate.txt ]
	then
		date +%s > /tmp/testdate.txt
	else
		#le fichier existe deja, on regarde depuis combien de temps il est la
		NB_SEC_CREATE=$(stat /tmp/testdate.txt -c %X)
        NB_SEC_ACTUELLE=$(date +%s)
		nb_sec=$(expr $NB_SEC_ACTUELLE - $NB_SEC_CREATE)
		if [ $nb_sec > $NB_SECONDES_ATTENTE ]
		then
			#on depasse le temps d'attente, on relance
			telnet_adsl_restart | telnet
			rm -f /tmp/testdate.txt
		fi
	fi
else
	rm -f /tmp/testdate.txt
fi

rm /var/run/surv_rezo.lock
c'est une adaptation de plusieurs scripts perso, j'ai pas testé...
jpcheney
Messages : 21
Inscription : 26 janv. 2022, 11:51

Re: Script pour reboot le routeur

Message par jpcheney »

sinon, pas con ton utilisation du find, j'y ai pas pensé... j'ai fait un truc plus compliqué ;-)
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: Script pour reboot le routeur

Message par bartras »

Alors j'ai pu tester en ping et avec nc.
Le script final donne ça:

Code : Tout sélectionner

#!/bin/bash

nc -w 5 -z www.google.com 443
nc1=$?
nc -w 5 -z www.free.fr 443
nc2=$?

if [ $nc1 -ne 0 ] && [ $nc2 -ne 0 ] && [ ! -f "ping_nok" ]; then
  sudo touch ping_nok
elif [ $nc1 -ne 0 ] && [ $nc2 -ne 0 ] && [ -f "ping_nok" ] && [ $(find ping_nok -mmin +1) ]; then
  echo "reboot routeur"
else
  sudo rm -f ping_nok
  echo "le fichier ping_nok n'existe pas"
fi
Ce que je fais, je désactive le mobiledata de mon routeur 4G, comme ça plus d'internet.
Quand le lance le script j'ai ça :
nc: getaddrinfo for host "www.google.com" port 443: Temporary failure in name resolution
nc: getaddrinfo for host "www.free.fr" port 443: Temporary failure in name resolution
Et pas de fichier ping_nok...



(Pour le find, je dis merci à chatGPT... j'avoue ne pas toucher grand chose à la syntaxe donc je tente pas mal de truc en m'aide de l'AI :) )
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: Script pour reboot le routeur

Message par bartras »

Ca y est ça fonctionne avec le ping par contre.
J'ai pu tout tester.

Code : Tout sélectionner

#!/bin/bash

# Ping les adresses 8.8.8.8 et 1.1.1.1
ping -c 1 8.8.8.8 > /dev/null
ping1=$?
ping -c 1 1.1.1.1 > /dev/null
ping2=$?

if [ $ping1 -ne 0 ] && [ $ping2 -ne 0 ] && [ ! -f "ping_nok" ]; then
  sudo touch ping_nok
  echo "creation fichier ping_ok"
elif [ $ping1 -ne 0 ] && [ $ping2 -ne 0 ] && [ -f "ping_nok" ] && [ $(find ping_nok -mmin +1) ]; then
  echo "reboot routeur"
elif [ $ping1 -ne 1 ] && [ $ping2 -ne 1 ] && [ -f "ping_nok" ]; then
  sudo rm -f ping_nok
  echo "suppression fichier ping_ok"
fi
Il me reste la partie reboot du routeur :twisted:
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: Script pour reboot le routeur

Message par bartras »

Bon je bloque là...

J'ai installé telnet sur le raspberry.

J'arrive à me connecter au routeur grâce à telnet (via la liaison ssh).

Il me demande mon mot de passe après la connexion.

Seulement je ne trouve pas la syntaxe pour écrire la ligne de code qui inclut le mot de passe dans mon script. :roll:
bartras
Messages : 140
Inscription : 17 mars 2017, 17:44
Localisation : Saint Etienne (42)

Re: Script pour reboot le routeur

Message par bartras »

Donc j'ai écris le script suivant:
Sans-titre1.png
Sans-titre1.png (10.12 Kio) Consulté 1139 fois
Mais quand je le lance, je suis en attente pour rentrer le password.
Quand je quitte (ctrl+C), là il m'affiche motdepasse.
Sans titre.png
Sans titre.png (4.88 Kio) Consulté 1139 fois


EDIT: Désolé Keros, je ne connaissais pas cette fonction. Je tâcherai de m'en souvenir.
Dernière modification par bartras le 22 mars 2023, 12:53, modifié 2 fois.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Modération

Message par Keros »

batras, dans ton message précédent, tu as mis une image hébergée à l'extérieur du forum. Il y a de fort risques qu'elles ne soient plus disponibles dans quelque temps comme ici, ou encore . Est-ce que tu peux éditer ton message et utiliser l'onglet Fichiers joints en dessous de la zone d'écriture des messages pour enregistrer les éléments sur le serveur du forum. Merci
Répondre