Receber notificação da supervisord quando um trabalho terminar

36

Existe alguma maneira de supervisordreiniciar 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?

Sebastian Hoitz
fonte

Respostas:

49

Existe um plugin chamado superlance.

Você o instala pip install superlanceou faz o download em: http://pypi.python.org/pypi/superlance

A próxima coisa que você faz é entrar no seu supervisord.confe adicionar as seguintes linhas:

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m [email protected]
events=PROCESS_STATE

Isso deve ser seguido por uma "atualização supervisorctl". Quando um processo "sair", você receberá uma notificação para [email protected].

Se você quiser apenas ouvir alguns aplicativos selecionados, poderá trocá-los -apor um -p program1ou se for um grupo. group1:program2Um exemplo seria

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2  -m [email protected]
events=PROCESS_STATE

Em relação à reinicialização automática: verifique se autorestartestá definido como true(está definido unexpectedpor 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
Thomaschaaf
fonte
Apesar de estar inativo por alguns anos, esse encadeamento ainda é válido - eu apenas testei a superlance 1.0.0 (datada de outubro de 2016) com o supervisor 3.1.4 (CentOS7) e o crashmail funcionou perfeitamente.
David Ramirez
0

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 [email protected]
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())
Ben Pgm
fonte