Hintergrundprozesse mit Supervisor überwachen

Supervisor ist ein Programm welches die Prozessüberwachung auf Linux vereinfacht. Möchte man ein Programm als Hintergrundprozess ablaufen lassen so ist man normalerweise gezwungen sich mit Runlevel Scripten zu beschäftigen. Aber auch mit diesen Startupscripten wird nur das automatische Starten und Stoppen vereinfacht. Ob ein Prozess noch läuft oder vielleicht neu gestartet werden muss ist damit kaum (nicht) möglich.

Dazu kommt noch die Rechteverwaltung auf diesen Prozessen - (die mich allerdings garnicht interessiert da ich der einzige hier bin der auf dem Server etwas macht).

Aufmerksam auf dieses Werkzeug bin ich durch JP Mens geworden. Achtung dessen Blog erzeugt “Arbeit” ;-)

Die Autoren empfehlen nicht die Pakete von Debian zu verwenden da sich diese häufig zu weit von dem aktuellen Stand der Entwicklung entfernt haben.

Die Installation ist trotzdem recht einfach

pip install supervisor 

Eine Standardkonfigurationsdatei wird so erstellt

echo_supervisord_conf > /etc/supervisord.conf

Das erste Programm das ich von Supervisor verwaltet haben möchte ist mqttwarn Dies starte ich nach Anleitung von jpmens.net

mkdir /etc/supervisord.d
vi /etc/supervisord.d/mqttwarn.ini
    [program:mqttwarn]
    directory = /opt/caserio//mqttwarn
    command = /opt/caserio/mqttwarn/mqttwarn.py
    environment= MQTTWARNINI="/opt/caserio/mqttwarn/mqttwarn.ini"

supervisord 
/usr/local/lib/python2.7/dist-packages/supervisor/options.py:295: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you 	probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
'Supervisord is running as root and it is searching '

Mit einem Startupscript muss ich mich aber dann doch noch rums chlagen, nämlich das vom Supervisor. Glücklicherweise gibt es hier schon was. Lediglich drei Zeilen müssen angepasst werden.

wget https://raw.githubusercontent.com/Supervisor/initscripts/master/debian-norrgard
mv debian-norrgard supervisord
chmod +x supervisord 
vi supervisord 
    DAEMON_ARGS="--pidfile ${PIDFILE} -c /etc/supervisord.conf
    DAEMON=/usr/local/bin/$NAME  
    SUPERVISORCTL=/usr/localbin/supervisorctl

Und so kann das dann aussehen wenn ein Prozeß der von Supervisor überwacht wird abstürzt

INFO supervisord started with pid 32271
INFO spawned: 'mqttwarn' with pid 32274
INFO success: mqttwarn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
INFO exited: mqttwarn (terminated by SIGKILL; not expected)
INFO spawned: 'mqttwarn' with pid 32289
INFO success: mqttwarn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)