Metode de plată Abuse

Cum să configurați SuperVisor

18.04.2022, 23:02

Pentru a gestiona procesoarele în Linux există sisteme de inițializare precum systemd. Dacă aveți nevoie de o soluție mai simplă, un program care poate gestiona procesele aplicației dumneavoastră, fie pe sistem, fie într-un container Docker. Un astfel de program există - este supervisor. Este un manager de procese open-source simplu din punct de vedere funcțional, scris în Python, care poate fi utilizat pentru a rula cât mai multe copii ale unui proces după cum este necesar și pentru a monitoriza starea acestora. Mai jos vă vom arăta cum să instalați și să configurați Supervisor folosind Ubuntu 20.04 ca exemplu.

Instalarea Supervisor

Cel mai simplu mod de a obține programul este să îl instalați din depozitele oficiale. Pentru a face acest lucru, trebuie să executați comanda:

$ sudo apt install supervisor

Cum să configurați SuperVisor

Dacă doriți ca programul să ruleze tot timpul, trebuie să îl adăugați la autoloader și să îl executați. Executați:

$ sudo systemctl enable supervisor --now

Cum să configurați SuperVisor

Apoi, puteți vizualiza starea utilizând comanda:

$ sudo systemctl status supervisor

Cum să configurați SuperVisor

Procesul de configurare

Fișierul de configurare se află la adresa /etc/supervisor/supervisord.conf. Acesta este, de asemenea, locul în care se află setările de bază. Este mai bine să utilizați directorul /etc/supervisor/conf.d/ pentru a configura procesele care rulează . Fișierul de configurare principal poate fi lăsat implicit. Să vedem cum să creăm fișiere de configurare pentru programe. Sintaxa unei secțiuni pentru un singur proces arată astfel:

nume variabilă valoare

Pentru fiecare proces este necesar să se treacă astfel de variabile pentru ca acesta să pornească automat și să se recupereze după o blocare:

  • directory - directorul de lucru;
  • command - comanda de pornire a procesului;
  • user- utilizator, în numele căruia va fi pornit procesul;
  • autostart - dacă procesul ar trebui să fie pornit automat;
  • autorestart- dacă procesul trebuie să fie repornit;

Cu toate acestea, există mult mai multe setări disponibile, iată câteva dintre ele care vor fi discutate în acest articol:

  • priority - prioritatea procesului care urmează să fie pornit;
  • environment - variabilele de mediu care urmează să fie transmise procesului;
  • stdout_logfile - unde să redirecționați ieșirea stdout a procesului;
  • stderr_logfile - unde se redirecționează ieșirea stderr a procesului;
  • process_name- numele procesului, cu posibilitatea de a înlocui numărul de copii;
  • numprocs - numărul de copii ale procesului care urmează să fie pornit;
  • startretries - numărul de încercări de a porni programul;
  • redirect_stderr - redirecționează ieșirea de eroare a procesului către ieșirea supervizorului;
  • redirect_stdout - redirecționează ieșirea procesului către ieșirea supervizorului.

Pentru o mai bună înțelegere și exemplificare, să executăm un script PHP care va sta în fundal:

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

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

Puteți crea un fișier de configurare a supervizorului separat pentru proces. Puteți introduce configurația chiar la sfârșitul fișierului de configurare principal, dar este mai bine să nu faceți acest lucru. Este mai bine să creați un fișier de configurare separat pentru fiecare program în /etc/supervisor/conf.d/ cu numele *.conf. De exemplu, pentru acest program, acest fișier va arăta astfel:

$ 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

Apoi trebuie să reporniți supervisor, acest lucru se poate face cu systemctl:

$ sudo systemctl restart supervisor

Sau cu utilitarul supervisorctl:

$ sudo supervisorctl reload

Cum să configurați SuperVisor

De asemenea, puteți vedea starea proceselor configurate cu ajutorul comenzii:

Cum să configurați SuperVisor

Dacă procesul este în stare de RUNNING, este în regulă și a fost pornit cu succes. Dar în acest caz procesul rulează într-o singură instanță și destul de des trebuie să rulați mai multe copii ale aceluiași proces. În acest scop, putem utiliza parametrii process_name și numprocs. Primul vă permite să modificați numele procesului pentru a conține numărul de copii, iar al doilea vă permite să specificați câte copii ar trebui să fie executate.

Variabila process_name conține de obicei un model de formatare a șirului de caractere python care conține numele programului și numărul procesului: %(nume_program)s_%(număr_proces)02d. Aici, numele variabilei este în paranteze, urmat de tipul acesteia. De exemplu, pentru a rula același program în patru fire de execuție, fișierul de configurare ar trebui să fie setat în această 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

Acum trebuie să reîncărcăm din nou supervisorctl și vor rula 4 procese:

$ sudo supervisorctl status

Cum să configurați SuperVisor

În același timp, este posibil să se salveze toate datele generate de program în fișierul jurnal. Parametrii stdout_logfile și stderr_logfile sunt utilizați în acest scop. De exemplu, puteți emite fișierul jurnal al execuției acestuia direct în folderul cu programul.

$ 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

După repornirea serviciului, jurnalele vor apărea în folderul cu programul:

Cum să configurați SuperVisor

În mod similar, dacă doriți să redirecționați ieșirea proceselor dvs. către ieșirea standard a supervizorului, trebuie să utilizați parametrii redirect_stderr și redirect_stdout. Dacă programul dvs. are nevoie de variabile de mediu, le puteți introduce folosind parametrul environment. Variabilele trebuie să fie scrise cu virgulă. De exemplu:

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

După fiecare modificare a configurației, nu uitați să reporniți supervisor pentru a aplica modificările. Utilitarul supervisorctl poate fi utilizat pentru a controla procesele. După cum v-ați dat seama deja, pentru a vedea lista de procese trebuie să executați:

$ sudo supervisorctl status

Apoi, cunoscând numele procesului, îl puteți reporni, de exemplu process:process_00:

$ sudo supervisorctl restart process:process_00

Cum să configurați SuperVisor

Stop:

$ sudo supervisorctl stop process:process_00

Sau porniți:

$ sudo supervisorctl start process:process_00

Alternativ, vă puteți conecta la proces și puteți vedea ce scoate pe stdout/stderr folosind comanda fg:

$ sudo supervisorctl fg process:process_00

Am analizat modul în care este configurat supervizorul și cum se utilizează software-ul de gestionare a proceselor.