Betalingsmåter Abuse

Slik konfigurerer du SuperVisor

18.04.2022, 23:02

For å administrere prosessorer i Linux finnes det initialiseringssystemer som systemd. Hvis du trenger en enklere løsning, kan du bruke et program som kan administrere applikasjonens prosesser, enten på systemet eller i en Docker-container. Et slikt program finnes - det er supervisor. Det er en funksjonelt enkel åpen kildekode-prosessadministrator skrevet i Python, som kan brukes til å kjøre så mange kopier av en prosess som nødvendig og overvåke tilstanden deres. Nedenfor viser vi hvordan du installerer og konfigurerer Supervisor ved å bruke Ubuntu 20.04 som eksempel.

Installere Supervisor

Den enkleste måten å få tak i programmet på, er å installere det fra de offisielle repositoriene. For å gjøre dette må du kjøre kommandoen:

$ sudo apt install supervisor

Slik konfigurerer du SuperVisor

Hvis du vil at programmet skal kjøre hele tiden, må du legge det til i autoladeren din og kjøre det. Kjør kommandoen:

$ sudo systemctl enable supervisor --now

Slik konfigurerer du SuperVisor

Deretter kan du se statusen ved hjelp av kommandoen:

$ sudo systemctl status supervisor

Slik konfigurerer du SuperVisor

Konfigurasjonsprosess

Konfigurasjonsfilen ligger i /etc/supervisor/supervisord.conf. Det er også her de grunnleggende innstillingene ligger. Det er bedre å bruke katalogen /etc/supervisor/conf.d/ til å konfigurere prosesser som kjører. Hovedkonfigurasjonsfilen kan stå igjen som standard. La oss se hvordan du oppretter konfigurasjonsfiler for programmer. Syntaksen for en seksjon for en enkelt prosess ser slik ut:

variabel navn verdi

For hver prosess er det nødvendig å sende slike variabler for at den automatisk skal starte og gjenopprette etter en krasj:

  • directory - arbeidskatalog;
  • kommando - kommando for å starte prosessen;
  • bruker- bruker, på vegne av hvilken prosessen vil bli startet;
  • autostart - om prosessen skal startes automatisk;
  • autorestart- om prosessen skal startes på nytt;

Det er imidlertid mange flere innstillinger tilgjengelig, her er noen av dem som vil bli diskutert i denne artikkelen:

  • priority - prioritet for prosessen som skal startes;
  • environment - miljøvariabler som skal sendes til prosessen;
  • stdout_logfile - hvor prosessens stdout-utdata skal omdirigeres;
  • stderr_logfile - hvor prosessens stderr-utdata skal omdirigeres;
  • process_name- prosessnavn, med mulighet for å erstatte kopinummer;
  • numprocs - antall kopier av prosessen som skal startes;
  • startretries - antall forsøk på å starte programmet;
  • redirect_stderr - omdirigerer prosessfeilutdata til supervisorutdata;
  • redirect_stdout - omdirigerer prosessutdata til supervisorutdata.

For å få en bedre forståelse og et eksempel, la oss kjøre et PHP-skript som bare vil henge i bakgrunnen:

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

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

Du kan opprette en egen supervisor-konfigurasjonsfil for prosessen. Du kan sette inn konfigurasjonen helt på slutten av hovedkonfigurasjonsfilen, men det er bedre å ikke gjøre det. Det er bedre å opprette en egen konfigurasjonsfil for hvert program i /etc/supervisor/conf.d/ med navnet *.conf. For dette programmet vil filen for eksempel se slik ut:

$ 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

Deretter må du starte supervisor på nytt, dette kan gjøres med systemctl:

$ sudo systemctl restart supervisor

Eller med verktøyet supervisorctl:

$ sudo supervisorctl reload

Slik konfigurerer du SuperVisor

Du kan også se statusen til de konfigurerte prosessene ved hjelp av kommandoen:

Slik konfigurerer du SuperVisor

Hvis prosessen er i RUNNING-status, er alt bra, og den ble startet vellykket. Men i dette tilfellet kjører prosessen i en enkelt instans, og ofte har du behov for å kjøre flere kopier av samme prosess. Til dette formålet kan vi bruke parameterne process_name og numprocs. Med den første kan du endre prosessnavnet slik at det inneholder kopinummeret, og med den andre kan du spesifisere hvor mange kopier som skal kjøres.

Variabelen process_name inneholder vanligvis et formateringsmønster for python-strenger som inneholder programnavnet og prosessnummeret: %(program_name)s_%(process_num)02d. Her står variabelnavnet i parentes, etterfulgt av typen. Hvis du for eksempel vil kjøre det samme programmet i fire tråder, bør konfigurasjonsfilen settes på denne måten:

$ 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

Nå må vi laste supervisorctl på nytt, og fire prosesser vil være i gang:

$ sudo supervisorctl status

Slik konfigurerer du SuperVisor

Samtidig er det mulig å lagre alle dataene som programmet sender ut, i loggfilen. Parametrene stdout_logfile og stderr_logfile brukes til dette formålet. Du kan for eksempel skrive ut loggfilen for utfø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

Etter at du har startet tjenesten på nytt, vil loggene vises i mappen med programmet:

Slik konfigurerer du SuperVisor

På samme måte kan du bruke parameterne redirect_stderr og redirect_stdout hvis du ønsker å omdirigere utdataene fra prosessene dine til standard supervisor-utdata. Hvis programmet ditt trenger miljøvariabler, kan du sende dem inn ved hjelp av miljøparameteren. Variabler bør skrives med komma. Et eksempel:

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

Etter hver konfigurasjonsendring må du huske å starte supervisor på nytt for å ta endringene i bruk. Verktøyet supervisorctl kan brukes til å kontrollere prosesser. Som du allerede har forstått, må du kjøre for å se listen over prosesser:

$ sudo supervisorctl status

Når du kjenner navnet på prosessen, kan du starte den på nytt, for eksempel process :process_00:

$ sudo supervisorctl restart process:process_00

Slik konfigurerer du SuperVisor

Stopp:

$ sudo supervisorctl stop process:process_00

Eller starte:

$ sudo supervisorctl start process:process_00

Alternativt kan du koble deg til prosessen og se hva den sender ut til stdout/stderr ved hjelp av kommandoen fg:

$ sudo supervisorctl fg process:process_00

Vi har sett på hvordan supervisor konfigureres, og hvordan du bruker programvaren for prosessadministrasjon.