Czy jest jakiś sposób, supervisord
aby automatycznie zrestartować nieudane / zakończone / zakończone zadanie i wysłać mi powiadomienie e-mailem ze zrzutem ostatnich x wierszy pliku dziennika?
Czy jest jakiś sposób, supervisord
aby automatycznie zrestartować nieudane / zakończone / zakończone zadanie i wysłać mi powiadomienie e-mailem ze zrzutem ostatnich x wierszy pliku dziennika?
Odpowiedzi:
Istnieje wtyczka o nazwie superlance.
Instalujesz go pip install superlance
lub pobierasz ze strony : http://pypi.python.org/pypi/superlance
Następną rzeczą, którą robisz, jest przejście do supervisord.conf
i dodanie następujących wierszy:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m email1@example.com
events=PROCESS_STATE
Po tym powinna nastąpić „aktualizacja supervisorctl”. Po zakończeniu procesu otrzymasz powiadomienie na adres email1@example.com.
Jeśli chcesz słuchać tylko wybranych aplikacji, możesz wymienić je -a
na a -p program1
lub jeśli jest to grupa group1:program2
Jednym z nich byłby
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -p program1 -p group1:program2 -m email1@example.com
events=PROCESS_STATE
Odnośnie automatycznego restartu: powinieneś upewnić się, że autorestart
jest ustawiony na true
(jest ustawiony unexpected
domyślnie). W ten sposób pakiet zostanie ponownie uruchomiony 3 razy. Jeśli po tym nadal wychodzi, poddaje się, ale możesz to zmienić za pomocą startretries
.
Przykładowy program:
[program:cat]
command=/bin/cat
autorestart=true
startretries=10
Próbowałem zainstalować superlance i uruchomić crashmail w następujący sposób:
sudo apt-get install python-pip
sudo pip install superlance
po zrobieniu:
sudo nano /etc/supervisor/supervisord.conf
i po dodaniu:
[eventlistener:crashmail]
command=/usr/local/bin/crashmail -a -m mymail@mail.fr
events=PROCESS_STATE
i nic nie otrzymuję ....
Mój plik crashmail to:
#!/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())