За управљање процесорима, Линук има системе за иницијализацију као што је системд. Ако вам је потребно једноставније решење, програм који може да управља процесима ваше апликације, у систему или у Доцкер контејнеру. Такав програм постоји - он је супервизор. Функционално једноставан менаџер процеса отвореног кода написан у Питхон-у, помоћу којег можете покренути жељени број копија процеса и пратити њихов статус. Затим ћемо вам рећи како да инсталирате и конфигуришете Супервизор користећи Убунту 20.04 као пример.
Најлакши начин да добијете програм је да га инсталирате из званичних спремишта. Да бисте то урадили, потребно је да покренете наредбу:
$ sudo apt install supervisor
Ако желите да програм ради константно, потребно је да га додате у покретање и покренете. Покрени:
$ sudo systemctl enable supervisor --now
Затим можете погледати статус користећи команду:
$ sudo systemctl status supervisor
Конфигурациони фајл се налази на /etc/supervisor/supervisord.conf.
Ево главних подешавања. Да бисте конфигурисали покренуте процесе, боље је користити /etc/supervisor/conf.d/.
Главна конфигурациона датотека може се оставити као подразумевана. Хајде да погледамо како да креирамо конфигурационе датотеке за програме. Синтакса одељка за један процес изгледа овако:
variable name value
За сваки процес, минимално је потребно проследити следеће варијабле да би се аутоматски покренуо и опоравио након пада:
directory
- радни именик;command
- команда за покретање процеса;user
- корисник у чије име ће процес бити покренут;autostart
- да ли процес треба да се покрене аутоматски;autorestart
- да ли процес треба поново покренути;Међутим, постоји много више доступних подешавања, ево неких од оних о којима ће бити речи у овом чланку:
priority
- приоритет процеса који се покреће;environment
- променљиве окружења које треба проследити процесу;stdout_logfile
- где да преусмери стдоут излаз процеса;stderr_logfile
- где преусмерити стдерр излаз процеса;process_name
- назив процеса, са могућношћу замене броја копије;numprocs
- број покренутих копија процеса;startretries
- број покушаја покретања програма;redirect_stderr
- преусмери излаз грешке процеса на излаз супервизора;redirect_stdout
- преусмери излаз процеса на излаз супервизора.За боље разумевање и пример, покренимо скрипту у ПХП-у, која ће једноставно висити у позадини:
$ sudo vi /home/sergiy/program/process.php <?php echo "Started..."; while(true){ sleep(5); }
Можете креирати засебну конфигурациону датотеку супервизора за процес. Можете уметнути конфигурацију директно на крај главне конфигурационе датотеке, али је боље да то не радите. Боље је да направите засебну конфигурациону датотеку за сваки програм у директоријуму /etc/supervisor/conf.d/
са именом *.цонф. На пример, за овај програм ова датотека ће изгледати овако:
$ 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
Затим морате поново покренути супервизор, то се може урадити помоћу системцтл:
$ sudo systemctl restart supervisor
Или помоћу услужног програма supervisorctl
:
$ sudo supervisorctl reload
Такође можете видети статус конфигурисаних процеса користећи команду:
Ако је процес у статусу РУННИНГ, ово је све у реду и успешно је покренут. Али у овом случају, процес се покреће у једној инстанци, а често је потребно покренути неколико копија истог процеса. Да бисте то урадили, можете користити параметре process_name
и numprocs
. Први вам омогућава да измените име процеса тако да садржи број копије, а други одређује колико копија треба да се покрене.
Променљива process_name
је обично испуњена Питхон шаблоном за форматирање стринга који садржи име програма и број процеса: %(program_name)s_%(process_num)02d
. Овде је у заградама име променљиве, а затим њен тип. На пример, да бисте покренули исти програм у четири нити, конфигурациона датотека мора да се промени у овај облик:
$ 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
Сада морате поново да покренете supervisorctl
и 4 процеса ће се већ покренути:
$ sudo supervisorctl status
У исто време, можете сачувати све податке које програм издаје у датотеку евиденције. stderr_logfile.
параметри stdout_logfile
и стдерр_логфиле. На пример, можете приказати датотеку евиденције његовог извршења директно у фасцикли са програмом.
$ 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
Након поновног покретања услуге, евиденције ће се појавити у фасцикли програма:
Слично томе, ако желите да преусмерите излаз својих процеса на стандардни излаз супервизора, требало би да користите опције redirect_stderr
и redirect_stdout.
Ако су вашем програму потребне променљиве окружења, можете их проследити помоћу параметра окружења. Променљиве морају бити написане одвојене зарезима. на пример:
$ environment=DISPLAY=":1",HOME="/root"
Након сваке промене конфигурације, не заборавите да поново покренете супервизор да бисте применили промене. Можете управљати процесима помоћу услужног програма супервисорцтл. Као што сте већ разумели, да бисте видели листу процеса које треба да покренете:
$ sudo supervisorctl status
Затим, знајући име процеса, можете га поново покренути, на пример process:process_00
:
$ sudo supervisorctl restart process:process_00
зауставити:
$ sudo supervisorctl stop process:process_00
Или покрените:
$ sudo supervisorctl start process:process_00
Поред тога, можете се повезати са процесом и видети шта он излази на stdout/stderr
користећи fg:
$ sudo supervisorctl fg process:process_00
Погледали смо како је supervisor
конфигурисан, као и како користити програм за управљање процесима.