Supervisor

Vorwort

Supervisor ist ein Client/Server-basiertes System, das den Benutzern die Prozessverwaltung auf unixoiden Betriebssystemen erlaubt. Es wird mittels einfacher Textdateien konfiguriert und bietet Ihnen die Möglichkeit, Prozesse auf verschiedenen Wegen und ohne Superuser-Rechte zu starten, stoppen und zu überwachen.


Bei bestimmten Vorinstallationen aus unserem Marketplace, wie z.B. Shopware, ist Supervisor bereits im Standard vorinstalliert. Sollte Supervisor auf Ihrem Server nicht vorhanden sein, kann dieser im Support-Level „Managed" durch unseren Support nachinstalliert werden. Bei Unmanaged Servern können Sie die Installation selber, z.B. über den Paketmanager der jeweiligen Distribution, durchführen.



Vergleich zu systemd

Supervisor ist ein leichtgewichtiges Tool, das vor allem genutzt wird, um benutzerdefinierte Prozesse am Laufen zu halten und bei Abstürzen automatisch neu zu starten – ideal für einfache Applikationen oder Container.\nSystemd dagegen ist ein vollständiges Init- und Service-Management-System, das neben Prozessen auch Abhängigkeiten, Boot-Reihenfolgen, Logging und Security steuert und auf den meisten modernen Linux-Distributionen Standard ist.


Vorteile Supervisor systemd
Zentrale Verwaltung*
Vereinfachte Administration
Prozessmanagement**
Deploymentintegration
Webinterface***

* Zentrale Verwaltung über unser Konfigurationsmodul möglich

** Weitere Prozesse können innerhalb kürzester Zeit gestartet werden, sofern diese benötigt werden

*** Ein Webinterface kann nach Konfiguration zur Verfügung gestellt werden



Features von Supervisor

Zentralisierung

Bei einer klassischen Konfiguration, z. B. über Cronjobs, besteht das Risiko, dass Prozesse nach einem Abbruch nicht automatisch neu gestartet werden und somit nicht zuverlässig ausgeführt werden. Supervisor verwaltet Anwendungen als Subprozesse und kann so konfiguriert werden, dass es diese beim Systemstart startet und bei einem Absturz automatisch neu startet.

Die Subprozesse werden dabei nicht als Daemon, sondern direkt über fork/exec gestartet. Dadurch erhält Supervisor sofort ein Signal vom Betriebssystem, wenn ein Prozess endet – im Gegensatz zu Lösungen, die auf PID-Dateien und periodisches Polling angewiesen sind, um abgestürzte Prozesse zu erkennen.


Erweiterbarkeit

Supervisor verfügt über ein Ereignisbenachrichtigungsprotokoll, das von Programmen und Skripten in beliebigen Programmiersprachen zur Überwachung genutzt werden kann. Zusätzlich bietet es eine XML-RPC-Schnittstelle zur Steuerung und kann durch Erweiterungen, die in Python implementiert sind, weiter angepasst werden.


Kompatibilität

Supervisor ist vollständig in Python implementiert und läuft auf nahezu allen Betriebssystemen außer Windows. Offiziell getestet und unterstützt wird es unter Linux, macOS, Solaris und FreeBSD.


Prozessgruppen und Prioritäten

In manchen Fällen ist es erforderlich, Prozesse in Gruppen oder nach Priorität zu starten. Supervisor ermöglicht es, Prozessen unterschiedliche Prioritätsgruppen zuzuweisen, sodass sie über supervisorctl mit Befehlen wie start all oder restart all automatisch entsprechend ihrer Priorität gestartet werden. Alternativ können Prozesse auch zu logischen Gruppen zusammengefasst werden, die dann als Einheit gestartet oder gestoppt werden können.



Verwaltung im Kundencenter

Über das Kundencenter besteht die Möglichkeit, Supervisor-Konfigurationsdateien auch ohne direkten Zugriff auf die Shell zu ändern. Die Konfiguration finden Sie im Reiter „Konfigurationsdateien" in der Serververwaltung. Bei Managed Servern ist hier bereits eine Supervisor-Konfiguration für die jeweilige Anwendung hinterlegt.

Beispiel: Konfiguration einer Shopware Standard-Installation


Beispielkonfiguration

Eine einfache supervisor-Konfigurationsdatei, mit der ein PHP-Script über die Konsole aufgerufen wird, könnte zum Beispiel so aussehen:


[program:demoscript]
process_name=%(program_name)s_%(process_num)02d
numprocs=1
command=php /var/www/demoscript.php --time-limit=120 --memory-limit=512M
environment=VARIABLE="demo_script_%(process_num)02d"
user=demouser
autostart=true
autorestart=true
startsecs=0
stopwaitsecs=3600
redirect_stderr=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log


Hierbei werden verschiedene Variablen verwendet, um supervisor zu steuern. Beispielhaft steht die Variable numprocs für die Zahl der zu startenden Prozesse oder die Variable user für den Benutzer, in dessen Kontext der Befehl ausgeführt wird. Eine vollständige Dokumentation der einzelnen Variablen finden Sie in der Online-Hilfe von Supervisor oder mit dem Befehl man supervisor.



Logging

Die Ausgabe des jeweiligen durch supervisor ausgeführten Programms auf stdout und stderr kann in ein entsprechendes Logfile umgeleitet werden, um z. B. weitere Analysen oder Fehlertracking durchzuführen. Dies ist in der Konfigurationsdatei des Jobs einstellbar.


Webinterface


Das Webinterface ist standardmäßig deaktiviert. Es sollte nur in privaten, geschützten Umgebungen aktiviert werden und keinesfalls aus dem offenen Internet zugänglich sein. Der Zugriff erfolgt unverschlüsselt.

Mittels eines einfachen Webinterfaces können die Supervisor-Jobs gesteuert sowie die Logdateien eingesehen werden. Die Konfiguration dazu erfolgt im Abschnitt [inet_http_server] der Supervisor-Konfiguration. Details dazu können der offiziellen Supervisor-Dokumentation entnommen werden.


Eine beispielhafte Konfiguration könnte wie folgt aussehen:

[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123


Übersicht des Supervisor-Webinterfaces



Nutzung des supervisorctl


Die Verbindung zu supervisorctl erfolgt bei Managed Servern immer über den SSH-Systembenutzer. Dieser unterscheidet sich von einem ggf. vorhandenen SSH Benutzer der vom Plesk Control Panel verwaltet wird.

Mit supervisorctl haben Sie die Möglichkeit, bestehende supervisor-Jobs über die Kommandozeile zu überwachen sowie zu aktivieren und zu deaktivieren. Es stellt somit eine Alternative zum bereits vorgestellten Webinterface dar.


Die wichtigsten supervisorctl CLI-Kommandos

Befehl Beschreibung
status Listet die aktuell laufenden Jobs und ihre PID auf
avail Listet die in den Konfigurationsdateien hinterlegten Jobs auf
start / stop Startet bzw. beendet den jeweiligen Job explizit
add / remove Entfernt den Job aus der Liste der auszuführenden Jobs
help Vollständige Übersicht über alle verfügbaren Befehle