Makseviisid Abuse

Kuidas seadistada SuperVisor

18.04.2022, 23:02

Linuxis on protsessorite haldamiseks olemas initsialiseerimissüsteemid nagu systemd. Kui vajate lihtsamat lahendust, siis programmi, mis suudab hallata teie rakenduse protsesse kas süsteemis või Dockeri konteineris. Selline programm on olemas - see on supervisor. See on Pythonis kirjutatud funktsionaalselt lihtne avatud lähtekoodiga protsessihaldur, millega saab käivitada nii palju protsesside koopiaid kui vaja ja jälgida nende olekut. Järgnevalt näitame, kuidas paigaldada ja konfigureerida Supervisori Ubuntu 20.04 näitel.

Supervisori paigaldamine

Kõige lihtsam viis programmi hankimiseks on paigaldada see ametlikest repositooriumidest. Selleks tuleb käivitada käsk:

$ sudo apt install supervisor

Kuidas seadistada SuperVisor

Kui soovite, et programm jookseks kogu aeg, peate selle lisama oma autoloaderisse ja käivitama. Käivita:

$ sudo systemctl enable supervisor --now

Kuidas seadistada SuperVisor

Järgmisena saate vaadata olekut käsuga:

$ sudo systemctl status supervisor

Kuidas seadistada SuperVisor

Konfigureerimisprotsess

Konfiguratsioonifail asub aadressil /etc/supervisor/supervisord.conf. Seal asuvad ka põhiseaded. Käimasolevate protsesside seadistamiseks on parem kasutada kataloogi /etc/supervisor/conf.d/. Põhikonfiguratsioonifaili võib vaikimisi jätta. Vaatame, kuidas luua programmide jaoks konfiguratsioonifaile. Ühe protsessi jaoks mõeldud sektsiooni süntaks näeb välja selline:

muutuja nimi väärtus

Igale protsessile on vaja edastada sellised muutujad, et see automaatselt käivituks ja taastuks pärast krahhi:

  • directory - töökataloog;
  • command - käsk protsessi käivitamiseks;
  • user- kasutaja, kelle nimel protsess käivitatakse;
  • autostart - kas protsess peaks automaatselt käivituma;
  • autorestart- kas protsess peaks uuesti käivituma;

Siiski on palju rohkem seadistusi, siin on mõned neist, mida käsitletakse selles artiklis:

  • Prioriteet - käivitatava protsessi prioriteet;
  • environment - protsessile edastatavad keskkonnamuutujad;
  • stdout_logfile - kuhu suunata protsessi stdout väljund;
  • stderr_logfile - kuhu suunata protsessi stderr-väljund;
  • process_name- protsessi nimi, mille võib asendada koopia numbriga;
  • numprocs - käivitatava protsessi koopiate arv;
  • startretries - programmi käivitamise katsete arv;
  • redirect_stderr - protsessi veaväljundi ümbersuunamine juhendaja väljundisse;
  • redirect_stdout - protsessi väljundi ümbersuunamine juhendaja väljundisse.

Parema arusaamise ja näite saamiseks käivitame PHP-skripti, mis lihtsalt ripub taustal:

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

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

Protsessi jaoks saab luua eraldi supervisori konfiguratsioonifaili. Te võite sisestada konfiguratsiooni otse põhikonfiguratsioonifaili lõppu, kuid seda on parem mitte teha. Parem on luua iga programmi jaoks eraldi konfiguratsioonifail /etc/supervisor/conf.d/ nimega *.conf. Näiteks selle programmi jaoks näeb see fail välja selline:

$ 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

Seejärel tuleb supervisor taaskäivitada, seda saab teha systemctl abil:

$ sudo systemctl restart supervisor

Või abiprogrammiga supervisorctl:

$ sudo supervisorctl reload

Kuidas seadistada SuperVisor

Saate näha ka konfigureeritud protsesside staatust käsuga:

Kuidas seadistada SuperVisor

Kui protsess on olekus RUNNING, siis on kõik korras ja see käivitati edukalt. Kuid sellisel juhul töötab protsess ühes eksemplaris ja üsna sageli on vaja käivitada sama protsessi mitu koopiat. Selleks saame kasutada parameetreid process_name ja numprocs. Esimene võimaldab muuta protsessi nime nii, et see sisaldaks koopia numbrit, ja teine võimaldab määrata, mitu koopiat käivitada.

Muutuja process_name sisaldab tavaliselt pythoni stringi vormingumustrit, mis sisaldab programmi nime ja protsessi numbrit: %(program_name)s_%(process_num)02d. Siin on muutuja nimi sulgudes, millele järgneb selle tüüp. Näiteks ühe ja sama programmi käivitamiseks neljas niidis tuleks konfiguratsioonifaili panna sellisel kujul:

$ 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üüd tuleb supervisorctl uuesti laadida ja 4 protsessi töötab:

$ sudo supervisorctl status

Kuidas seadistada SuperVisor

Samal ajal on võimalik kõik programmi poolt väljastatud andmed salvestada logifaili. Selleks kasutatakse parameetreid stdout_logfile ja stderr_logfile. Näiteks saab selle täitmise logifaili väljastada otse kausta, kus on programm.

$ 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

Pärast teenuse taaskäivitamist ilmuvad logid programmi kausta koos programmiga:

Kuidas seadistada SuperVisor

Samamoodi, kui soovite oma protsesside väljundit ümber suunata juhendaja standardväljundisse, tuleb kasutada parameetreid redirect_stderr ja redirect_stdout. Kui teie programm vajab mingeid keskkonnamuutujaid, saate need üle anda, kasutades keskkonnaparameetrit. Muutujad tuleb kirjutada komadega. Näiteks:

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

Pärast iga konfiguratsioonimuudatust ärge unustage supervisori taaskäivitamist, et muudatused rakenduksid. Protsesside juhtimiseks saab kasutada abiprogrammi supervisorctl. Nagu te juba aru saite, et näha protsesside nimekirja, mida on vaja käivitada:

$ sudo supervisorctl status

Seejärel, teades protsessi nime, saate selle uuesti käivitada, näiteks process:process_00:

$ sudo supervisorctl restart process:process_00

Kuidas seadistada SuperVisor

Stopp:

$ sudo supervisorctl stop process:process_00

Või käivitada:

$ sudo supervisorctl start process:process_00

Alternatiivselt saate protsessiga ühendust võtta ja vaadata, mida ta väljutab stdout/stderr-ile, kasutades käsku fg:

$ sudo supervisorctl fg process:process_00

Me vaatasime, kuidas supervisor on konfigureeritud ja kuidas kasutada protsessihaldustarkvara.