Esiste un modo per supervisord
riavviare automaticamente un processo non riuscito / uscito / terminato e inviarmi un'e-mail di notifica con un dump delle ultime x righe del file di registro?
Esiste un modo per supervisord
riavviare automaticamente un processo non riuscito / uscito / terminato e inviarmi un'e-mail di notifica con un dump delle ultime x righe del file di registro?
Risposte:
C'è un plugin chiamato superlance.
Lo installi pip install superlance
o lo scarichi all'indirizzo: http://pypi.python.org/pypi/superlance
La prossima cosa che fai è andare nel tuo supervisord.conf
e aggiungere le seguenti righe:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m email1@example.com
events=PROCESS_STATE
Questo dovrebbe essere seguito da un "aggiornamento supervisore". Quando un processo "termina" ora riceverai una notifica inviata a email1@example.com.
Se desideri solo ascoltare alcune app selezionate, puoi scambiarle -a
con una -p program1
o se si tratta di un gruppo group1:program2
Un esempio potrebbe essere
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2 -m email1@example.com
events=PROCESS_STATE
Per quanto riguarda il riavvio automatico: accertarsi che autorestart
sia impostato su true
(è impostato per unexpected
impostazione predefinita). In questo modo il pacchetto verrà riavviato 3 volte. Se dopo ciò esce ancora, si arrende, ma puoi cambiarlo con startretries
.
Esempio di programma:
[program:cat]
command=/bin/cat
autorestart=true
startretries=10
Ho provato a installare superlance ed eseguire crashmail in questo modo:
sudo apt-get install python-pip
sudo pip install superlance
dopo che lo faccio:
sudo nano /etc/supervisor/supervisord.conf
e dopo aver aggiunto:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m mymail@mail.fr
events=PROCESS_STATE
e non ricevo nulla ....
Il mio file crashmail è:
#!/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())