Spôsoby platby Abuse

Ako nastaviť aplikáciu SuperVisor

18.04.2022, 23:02

Na správu procesorov v Linuxe slúžia inicializačné systémy ako systemd. Ak potrebujete jednoduchšie riešenie, program, ktorý dokáže spravovať procesy vašej aplikácie, buď v systéme, alebo v kontajneri Docker. Takýto program existuje - je ním supervisor. Je to funkčne jednoduchý open-source správca procesov napísaný v jazyku Python, pomocou ktorého možno spustiť toľko kópií procesu, koľko je potrebné, a monitorovať ich stav. Nižšie vám ukážeme, ako nainštalovať a nakonfigurovať program Supervisor na príklade Ubuntu 20.04.

Inštalácia programu Supervisor

Najjednoduchší spôsob, ako získať program, je nainštalovať ho z oficiálnych repozitárov. Na to je potrebné spustiť príkaz:

$ sudo apt install supervisor

Ako nastaviť aplikáciu SuperVisor

Ak chcete, aby sa program spúšťal neustále, je potrebné ho pridať do automatického zaraďovača a spustiť. Spustenie: Ak chcete spustiť program, kliknite na položku Spustiť:

$ sudo systemctl enable supervisor --now

Ako nastaviť aplikáciu SuperVisor

Ďalej môžete zobraziť stav pomocou príkazu:

$ sudo systemctl status supervisor

Ako nastaviť aplikáciu SuperVisor

Proces konfigurácie

Konfiguračný súbor sa nachádza na adrese /etc/supervisor/supervisord.conf. Tu sa nachádzajú aj základné nastavenia. Na konfiguráciu spustených procesov je lepšie použiť adresár /etc/supervisor/conf.d/. Hlavný konfiguračný súbor môžete ponechať v predvolenom nastavení. Pozrime sa, ako vytvoriť konfiguračné súbory pre programy. Syntax časti pre jeden proces vyzerá takto:

názov premennej hodnota

Pre každý proces je potrebné odovzdať také premenné, aby sa automaticky spustil a zotavil po páde:

  • directory - pracovný adresár;
  • command - príkaz na spustenie procesu;
  • user -používateľ, v mene ktorého sa proces spustí;
  • autostart - či sa má proces automaticky spustiť;
  • autorestart- či sa má procesznovu spustiť;

Nastavení je však k dispozícii oveľa viac, tu sú niektoré z nich, o ktorých bude reč v tomto článku:

  • Priorita - priorita procesu, ktorý sa má spustiť;
  • environment - premenné prostredia, ktoré sa majú odovzdať procesu;
  • stdout_logfile - kam sa má presmerovať výstup stdout procesu;
  • stderr_logfile - kam sa má presmerovať výstup stderr procesu;
  • process_name- názov procesu s možnosťou nahradiť číslo kópie;
  • numprocs - počet kópií procesu, ktorý sa má spustiť;
  • startretries - počet pokusov o spustenie programu;
  • redirect_stderr - presmerovanie chybového výstupu procesu na výstup supervízora;
  • redirect_stdout - presmerovanie výstupu procesu na výstup supervízora.

Pre lepšie pochopenie a príklad spustíme skript PHP, ktorý bude len visieť na pozadí:

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

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

Pre proces môžete vytvoriť samostatný konfiguračný súbor supervízora. Konfiguráciu môžete vložiť priamo na koniec hlavného konfiguračného súboru, ale je lepšie to nerobiť. Lepšie je vytvoriť samostatný konfiguračný súbor pre každý program v /etc/supervisor/conf.d/ s názvom *.conf. Napríklad pre tento program bude tento súbor vyzerať takto:

$ 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

Potom je potrebné reštartovať program supervisor, čo je možné vykonať pomocou systemctl:

$ sudo systemctl restart supervisor

alebo pomocou nástroja supervisorctl:

$ sudo supervisorctl reload

Ako nastaviť aplikáciu SuperVisor

Stav nakonfigurovaných procesov si môžete pozrieť aj pomocou príkazu:

Ako nastaviť aplikáciu SuperVisor

Ak je proces v stave RUNNING, je všetko v poriadku a bol úspešne spustený. V tomto prípade však proces beží v jednej inštancii a pomerne často je potrebné spustiť viacero kópií toho istého procesu. Na tento účel môžeme použiť parametre process_name a numprocs. Prvý z nich umožňuje upraviť názov procesu tak, aby obsahoval číslo kópie, a druhý umožňuje určiť, koľko kópií sa má spustiť.

Premenná process_name zvyčajne obsahuje vzor formátovania reťazca jazyka python, ktorý obsahuje názov programu a číslo procesu: %(názov_programu)s_%(číslo_procesu)02d. Tu je názov premennej v zátvorkách, za ktorým nasleduje jej typ. Ak chcete napríklad spustiť ten istý program v štyroch vláknach, konfiguračný súbor by mal mať tento tvar:

$ 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

Teraz musíme znovu načítať supervisorctl a budú spustené 4 procesy:

$ sudo supervisorctl status

Ako nastaviť aplikáciu SuperVisor

Zároveň je možné uložiť všetky údaje, ktoré program vypisuje, do logovacieho súboru. Na tento účel sa používajú parametre stdout_logfile a stderr_logfile. Môžete napríklad vypisovať logovací súbor jeho vykonávania priamo do priečinka s programom.

$ 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

Po reštartovaní služby sa protokoly objavia v priečinku s programom:

Ako nastaviť aplikáciu SuperVisor

Podobne, ak chcete presmerovať výstup svojich procesov na štandardný výstup supervízora, mali by ste použiť parametre redirect_stderr a redirect_stdout. Ak váš program potrebuje nejaké premenné prostredia, môžete ich odovzdať pomocou parametra prostredia. Premenné by sa mali zapisovať s čiarkami. Napríklad:

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

Po každej zmene konfigurácie nezabudnite reštartovať program supervisor, aby sa zmeny uplatnili. Na riadenie procesov možno použiť nástroj supervisorctl. Ako ste si už uvedomili, na zobrazenie zoznamu procesov je potrebné vykonať:

$ sudo supervisorctl status

Potom, keď poznáte názov procesu, môžete ho reštartovať, napríklad process:process_00:

$ sudo supervisorctl restart process:process_00

Ako nastaviť aplikáciu SuperVisor

Zastaviť:

$ sudo supervisorctl stop process:process_00

alebo spustiť:

$ sudo supervisorctl start process:process_00

Prípadne sa môžete pripojiť k procesu a pozrieť si, čo vypíše na stdout/stderr pomocou príkazu fg:

$ sudo supervisorctl fg process:process_00

Pozreli sme sa na to, ako sa konfiguruje program supervisor a ako sa používa softvér na správu procesov.