Existe alguma maneira de supervisord
reiniciar automaticamente um trabalho com falha / encerrado / finalizado e me enviar um email de notificação com um despejo das últimas x linhas do arquivo de log?
Existe alguma maneira de supervisord
reiniciar automaticamente um trabalho com falha / encerrado / finalizado e me enviar um email de notificação com um despejo das últimas x linhas do arquivo de log?
Respostas:
Existe um plugin chamado superlance.
Você o instala pip install superlance
ou faz o download em: http://pypi.python.org/pypi/superlance
A próxima coisa que você faz é entrar no seu supervisord.conf
e adicionar as seguintes linhas:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m email1@example.com
events=PROCESS_STATE
Isso deve ser seguido por uma "atualização supervisorctl". Quando um processo "sair", você receberá uma notificação para email1@example.com.
Se você quiser apenas ouvir alguns aplicativos selecionados, poderá trocá-los -a
por um -p program1
ou se for um grupo. group1:program2
Um exemplo seria
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2 -m email1@example.com
events=PROCESS_STATE
Em relação à reinicialização automática: verifique se autorestart
está definido como true
(está definido unexpected
por padrão). Desta forma, o pacote será reiniciado 3 vezes. Se depois disso ainda sair, desiste, mas você pode mudar isso com startretries
.
Exemplo de programa:
[program:cat]
command=/bin/cat
autorestart=true
startretries=10
Tentei instalar a superlance e executar o crashmail assim:
sudo apt-get install python-pip
sudo pip install superlance
depois que eu faço:
sudo nano /etc/supervisor/supervisord.conf
e depois eu adicionei:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m mymail@mail.fr
events=PROCESS_STATE
e eu não recebo nada ....
Meu arquivo de 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())