Betalingsmetoder Abuse

Sådan sætter du SuperVisor op

18.04.2022, 23:02

Til at styre processorer i Linux findes der initialiseringssystemer som systemd. Hvis du har brug for en enklere løsning, skal du bruge et program, som kan styre din applikations processer, enten på systemet eller i en Docker-container. Sådan et program findes - det er supervisor. Det er en funktionelt enkel open source-processtyring skrevet i Python, som kan bruges til at køre så mange kopier af en proces som nødvendigt og overvåge deres tilstand. Nedenfor viser vi dig, hvordan du installerer og konfigurerer Supervisor med Ubuntu 20.04 som eksempel.

Installation af supervisor

Den nemmeste måde at få fat i programmet på er at installere det fra de officielle repositories. For at gøre dette skal du køre kommandoen:

$ sudo apt install supervisor

Sådan sætter du SuperVisor op

Hvis du vil have programmet til at køre hele tiden, skal du tilføje det til din autoloader og køre det. Udfør kommandoen:

$ sudo systemctl enable supervisor --now

Sådan sætter du SuperVisor op

Derefter kan du se status ved hjælp af kommandoen:

$ sudo systemctl status supervisor

Sådan sætter du SuperVisor op

Konfigurationsproces

Konfigurationsfilen ligger i /etc/supervisor/supervisord.conf. Det er også her, de grundlæggende indstillinger findes. Det er bedre at bruge biblioteket /etc/supervisor/conf.d/ til at konfigurere kørende processer. Hovedkonfigurationsfilen kan efterlades som standard. Lad os se, hvordan man opretter konfigurationsfiler til programmer. Syntaksen for et afsnit for en enkelt proces ser sådan ud:

variabel navn værdi

For hver proces er det nødvendigt at angive sådanne variabler, for at den automatisk kan starte og gendannes efter et nedbrud:

  • directory - arbejdsmappe;
  • command -kommando til at starte processen;
  • user- bruger, som processen skal startes på vegne af;
  • autostart - om processen skal startes automatisk;
  • autorestart- om processen skal genstartes;

Der er dog mange flere indstillinger til rådighed, og her er nogle af dem, som vil blive diskuteret i denne artikel:

  • priority - prioritet for den proces, der skal startes;
  • environment - miljøvariabler, der skal sendes til processen;
  • stdout_logfile - hvor processens stdout-out skal omdirigeres hen;
  • stderr_logfile - hvor processens stderr-output skal omdirigeres hen;
  • process_name- procesnavn med mulighed for at erstatte kopinummer;
  • numprocs - antal kopier af den proces, der skal startes;
  • startretries - antal forsøg på at starte programmet;
  • redirect_stderr - omdirigering af procesfejloutput til supervisoroutput;
  • redirect_stdout - omdirigerer procesoutput til supervisor-output.

For at få en bedre forståelse og et eksempel, lad os udføre et PHP-script, som bare vil hænge i baggrunden:

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

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

Du kan oprette en separat supervisor-konfigurationsfil til processen. Du kan indsætte konfigurationen lige i slutningen af hovedkonfigurationsfilen, men det er bedre ikke at gøre det. Det er bedre at oprette en separat konfigurationsfil for hvert program i /etc/supervisor/conf .d/ med navnet *.conf. For dette program vil filen f.eks. se sådan ud:

$ 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

Derefter skal du genstarte supervisor, det kan gøres med systemctl:

$ sudo systemctl restart supervisor

Eller med supervisorctl-værktøjet:

$ sudo supervisorctl reload

Sådan sætter du SuperVisor op

Du kan også se status for de konfigurerede processer ved hjælp af kommandoen:

Sådan sætter du SuperVisor op

Hvis processen er i RUNNING-status, er alt godt, og den blev startet med succes. Men i dette tilfælde kører processen i en enkelt instans, og ofte har man brug for at køre flere kopier af den samme proces. Til det formål kan vi bruge parametrene process_name og numprocs. Med den første kan man ændre procesnavnet, så det indeholder kopinummeret, og med den anden kan man angive, hvor mange kopier der skal køres.

Variablen process_name indeholder normalt et python-strengformateringsmønster, der indeholder programnavnet og procesnummeret: %(program_name)s_%(process_num)02d. Her står variabelnavnet i parentes efterfulgt af typen. Hvis man f.eks. vil køre det samme program i fire tråde, skal konfigurationsfilen have denne form:

$ 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 skal vi genindlæse supervisorctl igen, og 4 processer vil køre:

$ sudo supervisorctl status

Sådan sætter du SuperVisor op

Samtidig er det muligt at gemme alle de data, som programmet udsender, i logfilen. Parametrene stdout_logfile og stderr_logfile bruges til dette formål. Man kan f.eks. lægge logfilen for udførelsen direkte 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 genstart af tjenesten vises logfilerne i mappen med programmet:

Sådan sætter du SuperVisor op

På samme måde skal du bruge parametrene redirect_stderr og redirect_stdout, hvis du vil omdirigere output fra dine processer til standard supervisor-output. Hvis dit program har brug for miljøvariabler, kan du sende dem ind ved hjælp af miljøparameteren. Variabler skal skrives med komma. Et eksempel:

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

Efter hver konfigurationsændring skal du huske at genstarte supervisor for at anvende ændringerne. Værktøjet supervisorctl kan bruges til at kontrollere processer. Som du allerede har indset, skal du udføre for at se listen over processer:

$ sudo supervisorctl status

Når du kender navnet på processen, kan du genstarte den, f.eks. process :process_00:

$ sudo supervisorctl restart process:process_00

Sådan sætter du SuperVisor op

Stop:

$ sudo supervisorctl stop process:process_00

Eller starte:

$ sudo supervisorctl start process:process_00

Alternativt kan man forbinde til processen og se, hvad den sender til stdout/stderr ved hjælp af kommandoen fg:

$ sudo supervisorctl fg process:process_00

Vi har set på, hvordan supervisor konfigureres, og hvordan man bruger processtyringssoftwaren.