Bonjour,

Je suis actuellement en stage.Je travaille sur une carte Raspberry pie. Mon but est de vérifier la connectivité de cette carte avec le serveur au quelle elle est reliée (disant toutes les 15 minutes).

Concrètement, je cherche à vérifier la communication avec ce serveur, si le réseau est OK le code normal s'exécute. Par contre, si il y a un problème (perte de connexion) je dois terminer les processus proprement puis reboot la carte afin de la reconnecter au réseau. Tout ça devant être exécuté automatiquement avec un script.

Voici le script que j'ai écris pour le moment :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/python2.7
# coding: utf8
 
# -------------- Libraries and variable --------------------
 
import os
import time
 
hostname = "vmpc5.studies-north.ou.edu."
test=1 # loop variable
 
# -------------- Function --------------------
 
def ping():
	response = os.system("ping -c 1 " + hostname)
	return response
 
# -------------- Main code --------------------
 
# time.sleep(600) --> Let some time after a restart so the Rpie doesn't reboot at the infinite
 
 
while test==1:
	response=ping() # Look is the servor is UP or DOWN
if response == 0:
	print '\n', hostname, 'is up' # insert the "normal Rpie code" in exchange of this line
	time.sleep(5) # just for the test -> will be removed in my future code
else:
  	test=0
	print '\n', hostname, 'is down... Rebooting'
	#pkill -9 python :  commands to close gently all the active process before rebooting?
	os.system("sudo shutdown -r")
J'ai plusieurs questions sur ce sujet :

1) Lorsque je test le ping du serveur : "response = ping()" cela m'affiche toutes les informations du ping (paquets..) en boucle dans le terminal.. J'aimerais juste avoir la valeur stockée dans ma variable afin de faire mon test plus loin dans le code, est t'il possible de cacher ses informations?

J'avais aussi pensé à faire un ping toute les 15 minutes par exemple (pas besoin d'avoir un test toutes les secondes) mais je ne vois pas trop comment faire niveau code. Sortir ma commande de la boucle et faire des genres d'interruptions?

2) Je cherche une commande pour fermer les processus proprement en cas de perte de connexion, après avoir cherché j'ai trouvé :

pkill -9 python

Je ne sais pas si cette commande est adaptée, j'aurai voulu avoir votre avis

3) Après reboot, je veux que la carte ait le temps de se reconnecter au réseau, j'ai utilisé un time.sleep(600) afin de laisser 10 minutes. Encore une fois je ne sais pas si c'est la meilleure optimisation.

4) Que pensez vous du code en général? Voyez vous des fautes ou des idées d'amélioration ?


Merci d'avance pour vos réponses et vos conseils,

Florian