¿Hay alguna manera de supervisord
reiniciar automáticamente un trabajo fallido / salido / terminado y enviarme un correo electrónico de notificación con un volcado de las últimas x líneas del archivo de registro?
¿Hay alguna manera de supervisord
reiniciar automáticamente un trabajo fallido / salido / terminado y enviarme un correo electrónico de notificación con un volcado de las últimas x líneas del archivo de registro?
Respuestas:
Hay un complemento llamado superlance.
Lo instala pip install superlance
o lo descarga en: http://pypi.python.org/pypi/superlance
Lo siguiente que debes hacer es entrar en tu supervisord.conf
y agregar las siguientes líneas:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m email1@example.com
events=PROCESS_STATE
Esto debe ser seguido por una "actualización de supervisorctl". Cuando un proceso "finaliza", ahora recibirá una notificación enviada a email1@example.com.
Si solo desea escuchar algunas aplicaciones seleccionadas, puede cambiarlas -a
por -p program1
o si es un grupo. group1:program2
Un ejemplo sería
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2 -m email1@example.com
events=PROCESS_STATE
Con respecto al reinicio automático: debe asegurarse de que autorestart
esté configurado en true
(está configurado unexpected
de forma predeterminada). De esta manera, el paquete se reiniciará 3 veces. Si después de eso todavía sale, se da por vencido, pero puede cambiar eso con startretries
.
Programa de ejemplo:
[program:cat]
command=/bin/cat
autorestart=true
startretries=10
Intenté instalar superlance y ejecutar crashmail de esta manera:
sudo apt-get install python-pip
sudo pip install superlance
después de que lo haga:
sudo nano /etc/supervisor/supervisord.conf
y luego agregué:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m mymail@mail.fr
events=PROCESS_STATE
y no recibo nada ...
Mi archivo crashmail es:
#!/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())