Получить уведомление от супервизора, когда работа выходит

36

Есть ли способ supervisordавтоматически перезапустить неудавшуюся / завершившуюся / прерванную работу и отправить мне уведомление по электронной почте с дампом последних x строк файла журнала?

Себастьян Хойц
источник

Ответы:

49

Есть плагин под названием superlance.

Вы устанавливаете его pip install superlanceили загружаете по адресу: http://pypi.python.org/pypi/superlance

Следующее, что вы делаете, вы входите в свой supervisord.confи добавляете следующие строки:

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m email1@example.com
events=PROCESS_STATE

Это должно сопровождаться «обновлением supervisorctl». Когда процесс «завершается», вы теперь получаете уведомление, отправленное на email1@example.com.

Если вы хотите прослушать только некоторые выбранные приложения, вы можете обменять их -aна a -p program1или если это группа. group1:program2Одним из примеров будет

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2  -m email1@example.com
events=PROCESS_STATE

Относительно автоматического перезапуска: вы должны убедиться, что autorestartон установлен на true(он установлен unexpectedпо умолчанию). Таким образом, пакет будет перезапущен 3 раза. Если после этого он все еще выходит, он сдается, но вы можете изменить это с помощью startretries.

Пример программы:

[program:cat]
command=/bin/cat
autorestart=true
startretries=10
Thomaschaaf
источник
Несмотря на то, что в течение нескольких лет этот поток неактивен, он все еще действителен - я только что протестировал superlance 1.0.0 (от октября 2016 г.) с supervisor 3.1.4 (CentOS7), и аварийная почта работала просто отлично.
Дэвид Рамирес
0

Я попытался установить superlance и запустить crashmail так:

sudo apt-get install python-pip
sudo pip install superlance

после того как я сделаю:

sudo nano /etc/supervisor/supervisord.conf

и после того, как я добавил:

[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m mymail@mail.fr
events=PROCESS_STATE

и я ничего не получаю ....

Мой файл аварийной почты:

#!/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())
Бен Пгм
источник