Betalningsmetoder Abuse

Så här konfigurerar du SuperVisor

18.04.2022, 23:02

För att hantera processorer i Linux finns det initieringssystem som systemd. Om du behöver en enklare lösning, ett program som kan hantera din applikations processer, antingen på systemet eller i en Docker-container. Ett sådant program finns - det är supervisor. Det är en funktionellt enkel processhanterare med öppen källkod skriven i Python, som kan användas för att köra så många kopior av en process som behövs och övervaka deras tillstånd. Nedan visar vi hur du installerar och konfigurerar Supervisor med Ubuntu 20.04 som exempel.

Installera Supervisor

Det enklaste sättet att få tag på programmet är att installera det från de officiella arkiven. För att göra detta måste du köra kommandot:

$ sudo apt install supervisor

Så här konfigurerar du SuperVisor

Om du vill att programmet ska köras hela tiden måste du lägga till det i din autoloader och köra det. Kör kommandot:

$ sudo systemctl enable supervisor --now

Så här konfigurerar du SuperVisor

Därefter kan du visa statusen med hjälp av kommandot:

$ sudo systemctl status supervisor

Så här konfigurerar du SuperVisor

Konfigurationsprocess

Konfigurationsfilen finns i /etc/supervisor/supervisord.conf. Det är också där de grundläggande inställningarna finns. Det är bättre att använda katalogen /etc/supervisor/conf.d/ för att konfigurera processer som körs. Huvudkonfigurationsfilen kan lämnas som standard. Nu ska vi se hur man skapar konfigurationsfiler för program. Syntaxen för ett avsnitt för en enskild process ser ut så här:

variabel namn värde

För varje process är det nödvändigt att skicka sådana variabler för att den automatiskt ska starta och återhämta sig efter en krasch:

  • directory - arbetskatalog;
  • command -kommando för att starta processen;
  • user- användare, för vars räkning processen kommer att startas;
  • autostart - om processen ska startas automatiskt;
  • autorestart- om processen ska startas om;

Det finns dock många fler inställningar tillgängliga, här är några av dem som kommer att diskuteras i den här artikeln:

  • priority - prioritet för den process som ska startas;
  • environment - miljövariabler som ska skickas till processen;
  • stdout_logfile - vart processens stdout-utdata ska omdirigeras;
  • stderr_logfile - vart processens stderr-utdata ska omdirigeras;
  • process_name- processens namn, med möjlighet att ersätta med kopians nummer;
  • numprocs - antal kopior av den process som ska startas;
  • startretries - antal försök att starta programmet;
  • redirect_stderr - omdirigerar processens felutmatning till supervisorutmatningen;
  • redirect_stdout - omdirigerar processens utdata till supervisorns utdata.

För bättre förståelse och exempel, låt oss köra ett PHP-skript som bara kommer att hänga i bakgrunden:

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

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

Du kan skapa en separat konfigurationsfil för supervisor för processen. Du kan infoga konfigurationen precis i slutet av huvudkonfigurationsfilen, men det är bättre att inte göra det. Det är bättre att skapa en separat konfigurationsfil för varje program i /etc/supervisor/conf.d/ med namnet *.conf. För det här programmet kommer filen till exempel att se ut så här:

$ 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

Sedan måste du starta om supervisor, detta kan göras med systemctl:

$ sudo systemctl restart supervisor

Eller med verktyget supervisorctl:

$ sudo supervisorctl reload

Så här konfigurerar du SuperVisor

Du kan också se statusen för de konfigurerade processerna med kommandot:

Så här konfigurerar du SuperVisor

Om processen har statusen RUNNING är allt bra och den startades framgångsrikt. Men i det här fallet körs processen i en enda instans, och ganska ofta behöver du köra flera kopior av samma process. För detta ändamål kan vi använda parametrarna process_name och numprocs. Med den första kan du ändra processnamnet så att det innehåller kopianumret och med den andra kan du ange hur många kopior som ska köras.

Variabeln process_name innehåller vanligtvis ett formateringsmönster för pythonsträngar som innehåller programnamnet och processnumret: %(program_name)s_%(process_num)02d. Här står variabelnamnet inom parentes, följt av dess typ. Om man t.ex. vill köra samma program i fyra trådar ska konfigurationsfilen se ut på följande sätt:

$ 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

Nu måste vi ladda om supervisorctl igen och 4 processer kommer att köras:

$ sudo supervisorctl status

Så här konfigurerar du SuperVisor

Samtidigt är det möjligt att spara alla data som matas ut av programmet i loggfilen. Parametrarna stdout_logfile och stderr_logfile används för detta ändamål. Du kan t.ex. skriva ut loggfilen för körningen av programmet direkt i mappen med programmet.

$ 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

Efter omstart av tjänsten kommer loggarna att visas i mappen med programmet:

Så här konfigurerar du SuperVisor

Om du på samma sätt vill omdirigera utdata från dina processer till standardutdata från supervisor, bör du använda parametrarna redirect_stderr och redirect_stdout. Om ditt program behöver några miljövariabler kan du skicka in dem med hjälp av parametern environment. Variablerna bör skrivas med kommatecken. Ett exempel:

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

Kom ihåg att starta om Supervisor efter varje konfigurationsändring så att ändringarna tillämpas. Verktyget supervisorctl kan användas för att styra processer. Som du redan har förstått måste du exekvera för att se listan över processer:

$ sudo supervisorctl status

Om du sedan vet namnet på processen kan du starta om den, t.ex. process :process_00:

$ sudo supervisorctl restart process:process_00

Så här konfigurerar du SuperVisor

Stoppa:

$ sudo supervisorctl stop process:process_00

Eller starta:

$ sudo supervisorctl start process:process_00

Alternativt kan du ansluta till processen och se vad den matar ut till stdout/stderr med kommandot fg:

$ sudo supervisorctl fg process:process_00

Vi har tittat på hur Supervisor konfigureras och hur man använder programvaran för processhantering.