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)