Procesoru pārvaldībai Linux ir tādas inicializācijas sistēmas kā systemd. Ja jums ir nepieciešams vienkāršāks risinājums - programma, kas var pārvaldīt jūsu lietojumprogrammas procesus vai nu sistēmā, vai Docker konteinerā. Šāda programma ir - tā ir supervisor. Tas ir funkcionāli vienkāršs atvērtā koda procesu pārvaldnieks, kas rakstīts Python valodā un ko var izmantot, lai palaistu tik daudz procesu kopiju, cik nepieciešams, un uzraudzītu to stāvokli. Tālāk mēs parādīsim, kā instalēt un konfigurēt Supervisor, kā piemēru izmantojot Ubuntu 20.04.
Visvienkāršākais veids, kā iegūt programmu, ir instalēt to no oficiālajām repozitorijām. Lai to izdarītu, ir jāpalaiž komanda:
$ sudo apt install supervisor
Ja vēlaties, lai programma darbotos visu laiku, jums tā jāpievieno savam automātiskajam palīgrīkotājam un jāpalaiž. Izpildīt:
$ sudo systemctl enable supervisor --now
Tālāk varat apskatīt statusu, izmantojot komandu:
$ sudo systemctl status supervisor
Konfigurācijas fails atrodas adresē /etc/supervisor/supervisord.conf.
Šeit atrodas arī pamatiestatījumi. Lai konfigurētu notiekošos procesus, labāk ir izmantot direktoriju /etc/supervisor/conf.d/
. Galveno konfigurācijas failu var atstāt pēc noklusējuma. Aplūkosim, kā izveidot programmu konfigurācijas failus. Viena procesa sadaļas sintakse izskatās šādi:
mainīgā lieluma nosaukums vērtība
Katram procesam ir jāievada šādi mainīgie, lai tas varētu automātiski sākties un atjaunoties pēc avārijas:
direktorija
- darba direktorija;
komanda
- procesa palaišanas komanda; user -lietotājs
, kura vārdā tiks palaists process;
autostart
- vai process ir automātiski jāsāk; autorestart
- vai process ir
jārestartē
;Tomēr ir pieejami vēl daudzi citi iestatījumi, šeit ir daži no tiem, kas tiks aplūkoti šajā rakstā:
prioritāte
- startējamā procesa prioritāte;
vide
- vides mainīgie, kas tiks nodoti procesam;
stdout_logfile
- kur novirzīt procesa stdout izvades failu;
stderr_logfile
- kur novirzīt procesa stderr izejas datus; process_name
- procesa nosaukums, ar iespēju aizstāt kopijas numuru;
numprocs
- startējamā procesa kopiju skaits;
startretries
- programmas palaišanas mēģinājumu skaits;
redirect_stderr
- novirzīt procesa kļūdu izvadi uz pārziņa izvadi;
redirect_stdout
- novirza procesa izvades izvadi uz pārziņa izvadi.Labākai izpratnei un piemēram izpildīsim PHP skriptu, kas vienkārši karājas fonā:
$ sudo vi /home/sergiy/program/process.php
<?php
echo "Started...";
while(true){
sleep(5);
}
Procesam var izveidot atsevišķu pārrauga konfigurācijas failu. Konfigurāciju var ievietot tieši galvenā konfigurācijas faila beigās, bet labāk to nedarīt. Katrai programmai labāk ir izveidot atsevišķu konfigurācijas failu /etc/supervisor/conf.d/
ar nosaukumu *.conf. Piemēram, šai programmai šis fails izskatīsies šādi:
$ 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
Pēc tam supervisor ir jārestartē, to var izdarīt ar systemctl:
$ sudo systemctl restart supervisor
vai ar supervisorctl
utilītu:
$ sudo supervisorctl reload
Konfigurēto procesu statusu var arī apskatīt, izmantojot komandu:
Ja process ir statusā RUNNING, tas nozīmē, ka viss ir kārtībā un tas ir veiksmīgi iedarbināts. Taču šajā gadījumā process darbojas vienā instancē, un diezgan bieži ir nepieciešams palaist vairākas viena procesa kopijas. Šim nolūkam varam izmantot parametrus process_name
un numprocs
. Pirmais parametrs ļauj mainīt procesa nosaukumu, lai tajā būtu ietverts kopijas numurs, bet otrais parametrs ļauj norādīt, cik kopijas ir jāpalaiž.
Mainīgais process_name
parasti satur python virknes formatēšanas modeli, kas satur programmas nosaukumu un procesa numuru: %(program_name)s_%(process_num)02d
. Šeit mainīgā nosaukums ir iekavās, aiz kura norādīts tā tips. Piemēram, lai palaistu vienu un to pašu programmu četros pavedienos, konfigurācijas failā jāiestata šāds veids:
$ 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
Tagad mums atkal jāpārlādē supervisorctl
, un darbosies 4 procesi:
$ sudo supervisorctl status
Vienlaikus visus programmas izvadītos datus var saglabāt žurnāla failā. Šim nolūkam tiek izmantoti parametri stdout_logfile
un stderr_logfile
. Piemēram, programmas izpildes žurnāla failu var izvadīt tieši mapē, kurā atrodas programma.
$ 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ēc pakalpojuma restartēšanas žurnāli parādīsies mapē ar programmu:
Līdzīgi, ja vēlaties novirzīt
procesu izvades datus uz standarta pārrauga izvades failiem, izmantojiet parametrus redirect_stderr
un redirect_stdout
. Ja jūsu programmai ir nepieciešami kādi vides mainīgie, tos varat ievadīt, izmantojot vides parametru. Mainīgie jāraksta ar komatiem. Piemēram:
$ environment=DISPLAY=":1",HOME="/root"
Pēc katrām konfigurācijas izmaiņām jāatceras restartēt supervisor, lai piemērotu izmaiņas. Procesu kontrolei var izmantot supervisorctl utilītu. Kā jau esat sapratuši, lai redzētu procesu sarakstu, ir jāizpilda:
$ sudo supervisorctl status
Tad, zinot procesa nosaukumu, varat to restartēt, piemēram, process:process_00
:
$ sudo supervisorctl restart process:process_00
apturēt:
$ sudo supervisorctl stop process:process_00
vai sākt:
$ sudo supervisorctl start process:process_00
Varat arī izveidot savienojumu ar procesu un, izmantojot komandu fg
, apskatīt, ko tas izvada uz stdout/stderr
:
$ sudo supervisorctl fg process:process_00
Mēs aplūkojām, kā tiek konfigurēts uzraugs
un kā izmantot procesu pārvaldības programmatūru.