Y a-t-il un moyen supervisord
peut redémarrer automatiquement un travail qui a échoué/expiré/terminé. et m'envoyer un email de notification avec un dump des x dernières lignes du fichier journal ?
Réponses
Trop de publicités?Il existe un plugin appelé superlance.
Vous l'installez avec pip install superlance
ou le télécharger à l'adresse suivante http://pypi.Python.org/pypi/superlance
La prochaine chose que vous faites est d'aller dans votre supervisord.conf
et ajoutez les lignes suivantes :
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m email1@example.com
events=PROCESS_STATE
Cette opération doit être suivie d'un "supervisorctl update". Lorsqu'un processus "quitte", vous recevrez désormais une notification envoyée à email1@example.com.
Si vous ne voulez écouter que certaines applications sélectionnées, vous pouvez échanger l'écran de l'appareil contre celui de l'application. -a
pour un -p program1
ou s'il s'agit d'un groupe group1:program2
Un exemple serait
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2 -m email1@example.com
events=PROCESS_STATE
En ce qui concerne le redémarrage automatique : vous devez vous assurer que autorestart
est réglé sur true
(il est réglé sur unexpected
par défaut). De cette façon, le paquet sera redémarré 3 fois. Si après cela il sort toujours, il abandonne, mais vous pouvez changer cela avec startretries
.
Exemple de programme :
[program:cat]
command=/bin/cat
autorestart=true
startretries=10
J'ai essayé d'installer superlance et de lancer crashmail comme ceci :
sudo apt-get install python-pip
sudo pip install superlance
après que je l'ai fait :
sudo nano /etc/supervisor/supervisord.conf
et après avoir ajouté :
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m mymail@mail.fr
events=PROCESS_STATE
et je ne reçois rien....
Mon fichier crashmail est :
#!/usr/bin/python
-- coding: utf-8 --
import re
import sys
from superlance.crashmail import main
if name == 'main':
sys.argv[0] = re.sub(r'(-script.pyw?|.exe)?$', '', sys.argv[0])
sys.exit(main())