User avatar
AiGreek
Posts: 229
Joined: Sun Dec 06, 2015 7:44 pm

[Mini-Tuto] Python et Supervisor une histoire qui roule !

Thu Jan 28, 2016 2:25 pm

Salut les gars!

Pour ceux qui s'en souviennent peut-être encore, il y a quelques temps je bossais sur un petit système de notification avec LED (RGB) pour savoir si j'avais un/des mail(s) à lire. Un moyen comme un autre de savoir dans toute les pièces de la maison si j'ai un mail sans avoir le téléphone sur moi ou un visuel sur mon ordinateur.

Le problème c'est que le script avait tendance à planter sans raison et aléatoirement. Je n'ai jamais su si c'était à cause de mon script, une histoire de perte de connexion avec ma clé Wifi, ou si c'était lié aux divers "maintenance" de google sur leur service.

Du coup, on m'avait suggéré de traiter les exception et d'ajuster mon script :
  • LED Rouge allumée si j'ai (au moins) un mail
  • LED Verte allumée si j'ai aucun mail
  • LED Bleu si le script à crash
Si c'était bleu, je devais manuellement relancer le script et mine de rien c'était pas pratique. Il me fallait un moyen de faire plusieurs choses en 1 "commande" :
  • Lancer le script au boot
  • Le relancer s'il plante
  • Avoir un visuel rapide pour voir s'il est toujours lancé et accessoirement depuis combien de temps
  • Pouvoir tuer le processus précisément sans devoir tâtonner
Après des recherches interminable sur Google pour trouver LA solution, j'ai fini par la trouver.

Comme je sais c'est le genre de choses qui est "souvent" demandé sur le forum, je me suis dit qu'à défaut de garder ça pour moi, autant vous en faire profiter un peu au cas où ça intéresserais quelqu'un....Et entre-nous, c'est quand même plus agréable de poster/lire un mini-tutoriel, qu'une demande d'aide, n'est-ce pas ? ^^

Il s'agit tout simplement d'utiliser Supervisor.

Il vous suffit de l'installer via la commande

Code: Select all

sudo apt-get install supervisor
D'éditer le fichier /etc/supervisor/supervisord.conf

Code: Select all

sudo nano /etc/supervisor/supervisord.conf
et d'ajouter à la fin du fichier le script à lancer avec quelques paramètres

Code: Select all

; Gmail Notifier
[program:Gmail_Notifier]
command= python /home/pi/Desktop/Scripts/gmail_notif.py
autostart=true
autorestart=true
; Gmail Notifier: : Juste une indication de ce qu'est le script
[program:Gmail_Notifier]: Le nom que portera le processus. évitez les espaces et tant qu'à faire les accents histoire d'être sûr
command= python /home/pi/Desktop/Scripts/gmail_notif.py : La commande à lancer
autostart=true : il faut qu'il démarre au boot
autorestart=true : et qu'il se relance s'il plante

Sauvegardez, coupez et relancez supervisor avec les commandes qui vont bien

Code: Select all

sudo service supervisor stop
sudo service supervisor start
Pour vérifier que le script est bien lancé, faites simplement

Code: Select all

sudo supervisorctl status
Vous devriez voir votre script s'afficher

Code: Select all

pi@raspberrypi:~$ sudo supervisorctl status
Gmail_Notifier                   RUNNING    pid 2630, uptime 0:23:49
Home_Control                     RUNNING    pid 1070, uptime 0:25:54
Voilà voilà.

Un grand merci à Nicolargo.org pour son tuto très clair et Lonefish sur le channel #RaspberryPi pour l'aide sur les recherches et la configuration.

totoharibo
Posts: 4578
Joined: Thu Jan 24, 2013 8:43 am

Re: [Mini-Tuto] Python et Supervisor une histoire qui roule

Thu Jan 28, 2016 2:38 pm

dans wheezy avant le systemd il y avait respawn dans /etc/inittab. un truc qui se relance automatiquement en cas de plantage

ça doit pouvoir se faire pareil dans jessie sans supervisor. faut que je cherche.

JumpZero
Posts: 1245
Joined: Thu Mar 28, 2013 7:35 pm
Location: Arcachon, France

Re: [Mini-Tuto] Python et Supervisor une histoire qui roule

Thu Jan 28, 2016 2:55 pm

Excellent,
Merci de partager
Quand je pense qu'il y a quelques années j'ai fait un script qui tournait en boucle pour vérifier qu'un autre programme ne plantait pas (c'était pareil des plantages aléatoires, un Brother scan monitor...). J'aurais pu utiliser supervisor!
Oui Totoharibo respawn ça doit marcher aussi c'est ce qui est utilisé par défaut dans le inittab pour relancer les consoles virtuelles avec getty.
--
Jmp

nikotinux
Posts: 811
Joined: Sat Feb 02, 2013 2:11 am

Re: [Mini-Tuto] Python et Supervisor une histoire qui roule

Thu Jan 28, 2016 9:06 pm

pour info un lien vers résumé des possibilités dl'utilisation du démon watchdog qui permet aussi de monitorer un process
http://www.sat.dundee.ac.uk/psc/watchdo ... igure.html

(avec un lien d'ailleurs pour le respaw avec systemd)

totoharibo
Posts: 4578
Joined: Thu Jan 24, 2013 8:43 am

Re: [Mini-Tuto] Python et Supervisor une histoire qui roule

Wed Jul 27, 2016 8:41 am

JumpZero wrote:Excellent,
Merci de partager
Oui Totoharibo respawn ça doit marcher aussi c'est ce qui est utilisé par défaut dans le inittab pour relancer les consoles virtuelles avec getty.
--
Jmp
avec systemd, inittab a disparu. C'était pratique.

J'avais peur de systemd. C'est plus puissant et plus souple (après le RTFM bien sûr).

Return to “Français”