Mokėjimo būdai Abuse

Kaip nustatyti "SuperVisor

18.04.2022, 23:02

Procesoriams valdyti "Linux" yra inicializavimo sistemos, pavyzdžiui, systemd. Jei jums reikia paprastesnio sprendimo - programos, galinčios valdyti jūsų programos procesus sistemoje arba "Docker" konteineryje. Tokia programa egzistuoja - tai "Supervisor". Tai funkcionaliai paprasta atvirojo kodo procesų tvarkyklė, parašyta "Python" kalba, kurią galima naudoti paleisti tiek procesų kopijų, kiek reikia, ir stebėti jų būseną. Toliau parodysime, kaip įdiegti ir sukonfigūruoti "Supervisor", kaip pavyzdį naudodami "Ubuntu 20.04".

Supervisor diegimas

Paprasčiausias būdas gauti programą - įdiegti ją iš oficialių saugyklų. Norėdami tai padaryti, turite paleisti komandą:

$ sudo apt install supervisor

Kaip nustatyti

Jei norite, kad programa veiktų visą laiką, ją reikia įtraukti į automatinio paleidimo programą ir paleisti. Įvykdyti:

$ sudo systemctl enable supervisor --now

Kaip nustatyti

Toliau galite peržiūrėti būseną naudodami komandą:

$ sudo systemctl status supervisor

Kaip nustatyti

Konfigūracijos procesas

Konfigūracijos failas yra adresu /etc/supervisor/supervisord.conf. Čia taip pat yra pagrindiniai nustatymai. Vykdomiems procesams konfigūruoti geriau naudoti katalogą /etc/supervisor/conf.d/. Pagrindinį konfigūracijos failą galima palikti pagal numatytuosius nustatymus. Pažiūrėkime, kaip sukurti programų konfigūracijos failus. Vieno proceso skirsnio sintaksė atrodo taip:

kintamojo pavadinimas reikšmė

Kiekvienam procesui būtina perduoti tokius kintamuosius, kad jis automatiškai įsijungtų ir atsigautų po gedimo:

  • katalogas - darbinis katalogas;
  • komanda - proceso paleidimo komanda;
  • user -vartotojas, kurio vardu bus paleistas procesas;
  • autostart - ar procesas turi būti paleistas automatiškai;
  • autorestart- ar procesas turėtų būti paleistas išnaujo;

Tačiau yra daug daugiau nustatymų, čia pateikiami kai kurie iš jų, kurie bus aptarti šiame straipsnyje:

  • Prioritetas - paleidžiamo proceso prioritetas;
  • aplinka - aplinkos kintamieji, kurie turi būti perduodami procesui;
  • stdout_logfile - kur nukreipti proceso stdout išvestį;
  • stderr_logfile - kur nukreipti proceso stderr išvestį;
  • process_name- proceso pavadinimas, su galimybe pakeisti kopijos numerį;
  • numprocs - paleistinų proceso kopijų skaičius;
  • startretries - bandymų paleisti programą skaičius;
  • redirect_stderr - nukreipti proceso klaidų išvestį į prižiūrėtojo išvestį;
  • redirect_stdout - nukreipti proceso išvestį į prižiūrėtojo išvestį.

Kad geriau suprastume ir geriau pateiktume pavyzdį, paleiskime PHP scenarijų, kuris tiesiog kabės fone:

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

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

Procesui galite sukurti atskirą prižiūrėtojo konfigūracijos failą. Konfigūraciją galite įterpti pačioje pagrindinio konfigūracijos failo pabaigoje, tačiau geriau to nedaryti. Kiekvienai programai geriau sukurti atskirą konfigūracijos failą /etc/supervisor/conf.d/ su pavadinimu *.conf. Pavyzdžiui, šiai programai šis failas atrodys taip:

$ 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

Tada reikia iš naujo paleisti "Supervisor", tai galima padaryti naudojant systemctl:

$ sudo systemctl restart supervisor

arba naudodami supervisorctl įrankį:

$ sudo supervisorctl reload

Kaip nustatyti

Sukonfigūruotų procesų būseną taip pat galite pamatyti naudodami komandą:

Kaip nustatyti

Jei proceso būsena yra RUNNING, vadinasi, viskas gerai ir jis sėkmingai paleistas. Tačiau šiuo atveju procesas vykdomas vienu egzemplioriumi, o gana dažnai reikia paleisti kelias to paties proceso kopijas. Šiam tikslui galime naudoti parametrus process_name ir numprocs. Pirmuoju galima pakeisti proceso pavadinimą, kad jame būtų įrašytas kopijos numeris, o antruoju - nurodyti, kiek kopijų turėtų būti paleista.

Kintamajame process_name paprastai įrašomas python eilutės formatavimo šablonas, kuriame yra programos pavadinimas ir proceso numeris: %(program_name)s_%(process_num)02d. Čia kintamojo pavadinimas yra skliausteliuose, o po jo nurodomas tipas. Pavyzdžiui, norint paleisti tą pačią programą keturiomis gijomis, konfigūracijos faile reikia nustatyti tokią 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

Dabar turime vėl įkelti supervisorctl ir bus paleisti 4 procesai:

$ sudo supervisorctl status

Kaip nustatyti

Tuo pačiu metu galima įrašyti visus programos išvedamus duomenis į žurnalo failą. Šiam tikslui naudojami parametrai stdout_logfile ir stderr_logfile. Pavyzdžiui, galite išvesti programos vykdymo žurnalo failą tiesiai į aplanką su programa.

$ 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

Iš naujo paleidus paslaugą, žurnalo įrašai bus rodomi aplanke su programa:

Kaip nustatyti

Panašiai, jei norite nukreipti savo procesų išvestį į standartinę prižiūrėtojo išvestį, turėtumėte naudoti parametrus redirect_stderr ir redirect_stdout. Jei jūsų programai reikalingi kokie nors aplinkos kintamieji, juos galite perduoti naudodami aplinkos parametrą. Kintamuosius reikia rašyti su kableliais. Pavyzdžiui:

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

Po kiekvieno konfigūracijos pakeitimo nepamirškite iš naujo paleisti "Supervisor", kad pakeitimai būtų pritaikyti. Procesams valdyti galima naudoti supervisorctl įrankį. Kaip jau supratote, norėdami pamatyti procesų sąrašą, turite vykdyti:

$ sudo supervisorctl status

Tada, žinodami proceso pavadinimą, galite jį paleisti iš naujo, pavyzdžiui, process:process_00:

$ sudo supervisorctl restart process:process_00

Kaip nustatyti

Sustabdyti:

$ sudo supervisorctl stop process:process_00

arba paleisti:

$ sudo supervisorctl start process:process_00

Taip pat galite prisijungti prie proceso ir pamatyti, ką jis išveda į stdout/stderr, naudodami komandą fg:

$ sudo supervisorctl fg process:process_00

Apžvelgėme, kaip sukonfigūruotas "Supervisor" ir kaip naudotis procesų valdymo programine įranga.