Lassen Sie sich vom Vorgesetzten benachrichtigen, wenn ein Job beendet wird

36

Gibt es eine Möglichkeit, supervisordeinen fehlgeschlagenen / beendet / abgebrochenen Job automatisch neu zu starten und mir eine Benachrichtigungs-E-Mail mit einem Speicherauszug der letzten x Zeilen der Protokolldatei zu senden?

Sebastian Hoitz
quelle

Antworten:

49

Es gibt ein Plugin namens Superlance.

Sie installieren es mit pip install superlanceoder laden es herunter unter: http://pypi.python.org/pypi/superlance

Das nächste, was Sie tun, ist, dass Sie in Ihre gehen supervisord.confund die folgenden Zeilen hinzufügen:

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

Darauf sollte ein "supervisorctl update" folgen. Wenn ein Prozess "beendet" wird, wird eine Benachrichtigung an [email protected] gesendet.

Wenn Sie nur einige ausgewählte Apps anhören möchten, können Sie die -agegen eine austauschen, -p program1oder wenn es sich um eine Gruppe handelt. group1:program2Ein Beispiel wäre

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

In Bezug auf den automatischen Neustart: Sie sollten sicherstellen, dass autorestartauf true( unexpectedstandardmäßig) eingestellt ist. Auf diese Weise wird das Paket dreimal neu gestartet. Wenn es danach noch existiert, gibt es auf, aber Sie können das mit ändern startretries.

Beispielprogramm:

[program:cat]
command=/bin/cat
autorestart=true
startretries=10
Thomaschaaf
quelle
Obwohl dieser Thread für einige Jahre inaktiv war, ist er immer noch gültig - ich habe gerade superlance 1.0.0 (vom Oktober 2016) mit Supervisor 3.1.4 (CentOS7) getestet und die Crashmail hat einwandfrei funktioniert.
David Ramirez
0

Ich habe versucht, superlance zu installieren und Crashmail wie folgt auszuführen:

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

nachdem ich es getan habe:

sudo nano /etc/supervisor/supervisord.conf

und nachdem ich hinzugefügt habe:

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

und ich bekomme nichts ....

Meine crashmail Datei ist:

#!/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
quelle