Avec un système (Remote SDR) tournant Ă distance H24, nous ne sommes pas Ă l’abri d’un plantĂ© de système et surtout d’une perte du contrĂ´le Ă distance. Pour y remĂ©dier, il est possible de mettre en place un « Watchdog » qui test en permanence la liaison vers internet et redĂ©marre le système en cas de non-rĂ©ponse au bout d’un certain temps.
Kernel Watchdog
Le Watchdog (chien de garde) du noyau Linux est utilisĂ© pour surveiller si un système est en cours d’exĂ©cution. Il est censĂ© redĂ©marrer automatiquement les systèmes suspendus en raison d’erreurs logicielles irrĂ©cupĂ©rables. Le module de surveillance est spĂ©cifique au matĂ©riel ou au processeur utilisĂ©.
Pour tester la possibilitĂ© d’utiliser cette fonctionnalitĂ© sur votre système, ouvrez une fenĂŞtre terminale en mode root et tapez :
echo 1 > /dev/watchdog
Votre système va rebooter au bout de 15 s en gĂ©nĂ©ral. Cela fonctionne sur les Raspberry Pi 4, les Orange Pi etc…
Il suffit d’Ă©crire un bout de code qui toute les 5 s par exemple va exĂ©cuter cette mĂŞme commande qui relance le compteur de 15 s et Ă©vite le reboot sauf si cela s’arrĂŞte.
Dans le cas ci-après on va tester la prĂ©sence du rĂ©seau ethernet et relancer le watchdog que s’il est prĂ©sent. Ainsi en cas de blocage du WIFI ne permettant plus de se connecter Ă distance, le système va rebooter. Pour cela, on va installer la bibliothèque ping3 avec:
pip3 install ping3
Ci-après un petit code en python3 qui va exciter le watchdog toute les 5s sauf si pas d’internet.
#!/usr/bin/python3
import os
import time
from ping3 import ping
adr_start = "/home/Last_boot.txt"
periode_to_test_internet=20 #20*5s
internet_ok=True
def myping(host):
resp = ping(host)
if resp == False:
return False
else:
return True
m="Last Boot : " +time.asctime()
file=open(adr_start,"w")
file.write(m+"\r\n")
file.close()
delay_watchdog = 2*periode_to_test_internet # augmentation délai au démarrage
try:
print ("Press CTRL+C to exit")
while True:
time.sleep(5)
if delay_watchdog>0:
delay_watchdog=delay_watchdog-1
else :
internet_ok =False
delay_watchdog = periode_to_test_internet
ok1 = myping("www.google.com")
ok2 = myping("192.168.0.254")
if ok1 == True or ok2 == True :
internet_ok = True
if internet_ok and delay_watchdog < periode_test_internet:
os.system("echo 1 > /dev/watchdog") # Excite the watchdog
except KeyboardInterrupt:
print (" Bye.")
Le test internet ne se fait pas immĂ©diatement pour ne pas surcharger le système, et donner le temps de reprendre la main si votre programme plante, car cela peut gĂ©nĂ©rer une boucle infernale oĂą votre système n’arrĂŞte pas de rebooter. A chaque reboot, on Ă©crit l’heure dans un fichier pour avoir la date du dernier dĂ©marrage.
Installation de l’application « Watchdog »
Une autre solution est d’installer un logiciel qui surveille les fonctionnalitĂ©s de votre carte comme la prĂ©sence du rĂ©seau ethernet et d’autres paramètres. Il lancera un processus de reboot si besoin. Sur un Orange Pi ou un Raspberry Pi, ouvrir par ssh un terminal et tĂ©lĂ©charger l’application watchdog prĂ©cĂ©dĂ© de ‘sudo’ si vous n’ĂŞtes pas en ‘root’.
sudo apt install watchdog
Une fois installé, ouvrir le fichier de configuration qui permet de faire de nombreux tests périodiques.
nano /etc/watchdog.conf
Ici, on va se limiter Ă tester la liaison ethernet vers l’extĂ©rieur pour ĂŞtre sĂ»r de toujours pouvoir accĂ©der Ă distance Ă son Orange PI ou Raspberry Pi qui fait tourner ‘Remote SDR’. Il faut dĂ©finir certains paramètres.
interval = 10
C’est un intervalle de mesure en secondes qui doit ĂŞtre infĂ©rieure au time_out hardware de votre système (en gĂ©nĂ©ral 15 s). On ne va pas mettre des valeurs trop faibles non plus, il n’est pas nĂ©cessaire de tester le rĂ©seau toutes les secondes.
On va mesurer plusieurs fois avant de décréter le système en panne. Ici 360s.
retry-timeout = 360
Comme mesure, on va tester 2 adresses ip. Par exemple le dns de google et l’adresse de la box en interne. Il faut choisir des adresses susceptibles de fonctionner en permanence.
ping = 8.8.8.8
ping = 192.168.0.254
Il faut dĂ©finir si la liaison ethernet se fait par le rĂ©seau cablĂ© en gĂ©nĂ©ral ‘eth0’
Si l’on passe par le wifi, c’est en gĂ©nĂ©ral wlan0.
ifconfig donne le détail des connexions.
interface = eth0
Sauvegarder le fichier avec un CTRL-X
Lancer le service
sudo service watchdog start
Tester le service
sudo service watchdog status
Il ne vous reste plus qu’Ă couper la liaison Ethernet 10 mn et voir comment rĂ©agit le système.