Чи може якийсь спосіб supervisord
автоматично перезапустити невдалу / виїзну / припинену роботу та надіслати мені повідомлення електронною поштою з дампами останніх x рядків файла журналу?
Чи може якийсь спосіб supervisord
автоматично перезапустити невдалу / виїзну / припинену роботу та надіслати мені повідомлення електронною поштою з дампами останніх x рядків файла журналу?
Відповіді:
Існує плагін під назвою 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
для -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
Я спробував встановити суперлайн та запустити аварійну пошту так:
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())