Zahlungsmethoden Abuse

So richten Sie SuperVisor ein

18.04.2022, 23:02

Für die Verwaltung von Prozessoren in Linux gibt es Initialisierungssysteme wie systemd. Wenn Sie eine einfachere Lösung benötigen, ein Programm, das die Prozesse Ihrer Anwendung verwalten kann, entweder auf dem System oder in einem Docker-Container. Ein solches Programm gibt es - es ist supervisor. Es ist ein funktionell einfacher Open-Source-Prozessmanager, der in Python geschrieben wurde und mit dem Sie so viele Kopien eines Prozesses wie nötig ausführen und deren Zustand überwachen können. Im Folgenden zeigen wir Ihnen, wie Sie Supervisor am Beispiel von Ubuntu 20.04 installieren und konfigurieren.

Installieren von Supervisor

Der einfachste Weg, das Programm zu bekommen, ist, es aus den offiziellen Repositories zu installieren. Dazu müssen Sie den Befehl ausführen:

$ sudo apt install supervisor

So richten Sie SuperVisor ein

Wenn Sie möchten, dass das Programm immer läuft, müssen Sie es zu Ihrem Autoloader hinzufügen und ausführen. Ausführen:

$ sudo systemctl enable supervisor --now

So richten Sie SuperVisor ein

Anschließend können Sie den Status über den Befehl anzeigen:

$ sudo systemctl status supervisor

So richten Sie SuperVisor ein

Konfigurationsprozess

Die Konfigurationsdatei befindet sich unter /etc/supervisor/supervisord.conf. Hier befinden sich auch die Grundeinstellungen. Für die Konfiguration laufender Prozesse ist es besser, das Verzeichnis /etc/supervisor/conf.d/ zu verwenden . Die Hauptkonfigurationsdatei kann als Standard belassen werden. Sehen wir uns nun an, wie man Konfigurationsdateien für Programme erstellt. Die Syntax eines Abschnitts für einen einzelnen Prozess sieht wie folgt aus:

Variablenname Wert

Für jeden Prozess müssen solche Variablen übergeben werden, damit er automatisch gestartet und nach einem Absturz wiederhergestellt werden kann:

  • directory - Arbeitsverzeichnis;
  • command - Befehl zum Starten des Prozesses;
  • user- Benutzer, in dessen Namen der Prozess gestartet werden soll;
  • autostart - ob der Prozess automatisch gestartet werden soll;
  • autorestart- ob der Prozess neu gestartet werden soll;

Es gibt jedoch noch viele weitere Einstellungen, von denen in diesem Artikel nur einige behandelt werden:

  • Priorität - Prioritätdes zu startenden Prozesses;
  • environment - Umgebungsvariablen, die an den Prozess übergeben werden sollen;
  • stdout_logfile - wohin die stdout-Ausgabe des Prozesses umgeleitet werden soll;
  • stderr_logfile - wohin die stderr-Ausgabe des Prozesses umgeleitet werden soll;
  • process_name- Prozessname, mit der Möglichkeit, die Kopiennummer zu ersetzen;
  • numprocs - Anzahl der Kopien des zu startenden Prozesses;
  • startretries - Anzahl der Versuche, das Programm zu starten;
  • redirect_stderr - leitet die Fehlerausgabe des Prozesses auf die Ausgabe des Supervisors um;
  • redirect_stdout - Prozessausgabe auf die Supervisor-Ausgabe umleiten.

Zum besseren Verständnis und als Beispiel führen wir ein PHP-Skript aus, das einfach im Hintergrund läuft:

$ sudo vi /home/sergiy/program/process.php

<?php
echo "Started...";
while(true){
  sleep(5);
}

Sie können eine separate Supervisor-Konfigurationsdatei für den Prozess erstellen. Sie können die Konfiguration direkt am Ende der Hauptkonfigurationsdatei einfügen, aber es ist besser, das nicht zu tun. Es ist besser, für jedes Programm eine eigene Konfigurationsdatei in /etc/supervisor/conf.d/ mit dem Namen *.conf zu erstellen. Für dieses Programm sieht die Datei zum Beispiel so aus:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true

Dann müssen Sie den Supervisor neu starten, dies kann mit systemctl geschehen:

$ sudo systemctl restart supervisor

Oder mit dem Dienstprogramm supervisorctl:

$ sudo supervisorctl reload

So richten Sie SuperVisor ein

Sie können auch den Status der konfigurierten Prozesse mit dem Befehl sehen:

So richten Sie SuperVisor ein

Wenn der Prozess im Status RUNNING ist, ist alles gut und er wurde erfolgreich gestartet. Aber in diesem Fall läuft der Prozess in einer einzigen Instanz, und oft muss man mehrere Kopien desselben Prozesses laufen lassen. Zu diesem Zweck können wir die Parameter process_name und numprocs verwenden. Mit dem ersten können Sie den Prozessnamen so ändern, dass er die Nummer der Kopie enthält, und mit dem zweiten können Sie angeben, wie viele Kopien ausgeführt werden sollen.

Die Variable process_name enthält normalerweise ein Python-String-Formatierungsmuster, das den Programmnamen und die Prozessnummer enthält: %(program_name)s_%(process_num)02d. Hier steht der Variablenname in Klammern, gefolgt von seinem Typ. Um zum Beispiel das gleiche Programm in vier Threads laufen zu lassen, sollte die Konfigurationsdatei in dieser Form angelegt werden:

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4

Jetzt müssen wir supervisorctl erneut laden und es laufen 4 Prozesse:

$ sudo supervisorctl status

So richten Sie SuperVisor ein

Gleichzeitig ist es möglich, alle Daten, die das Programm ausgibt, in der Logdatei zu speichern. Dazu werden die Parameter stdout_logfile und stderr_logfile verwendet. Sie können zum Beispiel die Protokolldatei der Programmausführung direkt in den Ordner mit dem Programm ausgeben.

$ sudo vi /etc/supervisor/conf.d/process.conf

[program:process]


directory=/home/sergiy/program/


command=/usr/bin/php process.php


user=sergiy


autostart=true


autorestart=true


process_name=%(program_name)s_%(process_num)02d


numprocs=4


stdout_logfile=/home/sergiy/program/process.log


stderr_logfile=/home/sergiy/program/process.log.error

Nach dem Neustart des Dienstes erscheinen die Protokolle in dem Ordner mit dem Programm:

So richten Sie SuperVisor ein

Wenn Sie die Ausgaben Ihrer Prozesse auf die Standardausgabe des Supervisors umleiten möchten, sollten Sie die Parameter redirect_stderr und redirect_stdout verwenden . Wenn Ihr Programm Umgebungsvariablen benötigt, können Sie diese mit dem Parameter environment übergeben. Variablen sollten mit Kommas geschrieben werden. Ein Beispiel:

$ environment=DISPLAY=":1",HOME="/root"

Denken Sie daran, supervisor nach jeder Konfigurationsänderung neu zu starten, damit die Änderungen übernommen werden. Das Dienstprogramm supervisorctl kann zur Kontrolle von Prozessen verwendet werden. Wie Sie bereits festgestellt haben, müssen Sie die Liste der Prozesse ausführen, um sie zu sehen:

$ sudo supervisorctl status

Wenn Sie den Namen des Prozesses kennen, können Sie ihn neu starten, zum Beispiel process:process_00:

$ sudo supervisorctl restart process:process_00

So richten Sie SuperVisor ein

Anhalten:

$ sudo supervisorctl stop process:process_00

Oder starten:

$ sudo supervisorctl start process:process_00

Alternativ dazu können Sie sich mit dem Prozess verbinden und sehen, was er mit dem Befehl fg in stdout/stderr ausgibt:

$ sudo supervisorctl fg process:process_00

Wir haben uns angesehen, wie Supervisor konfiguriert wird und wie man die Prozessverwaltungssoftware verwendet.