Начини на плащане Abuse

Как да настроите SuperVisor

18.04.2022, 23:02

За управление на процесорите в Linux има системи за инициализация като systemd. Ако се нуждаете от по-опростено решение, можете да използвате програма, която да управлява процесите на вашето приложение - или в системата, или в контейнер Docker. Такава програма съществува - тя е supervisor. Това е функционално прост мениджър на процеси с отворен код, написан на Python, който може да се използва за стартиране на толкова копия на даден процес, колкото е необходимо, и за наблюдение на тяхното състояние. По-долу ще ви покажем как да инсталирате и конфигурирате Supervisor, като за пример ще използваме Ubuntu 20.04.

Инсталиране на Supervisor

Най-лесният начин да се сдобиете с програмата е да я инсталирате от официалните хранилища. За да направите това, трябва да изпълните командата:

$ sudo apt install supervisor

Как да настроите SuperVisor

Ако искате програмата да се изпълнява постоянно, трябва да я добавите към вашия автозадавач и да я стартирате. Изпълнете:

$ sudo systemctl enable supervisor --now

Как да настроите SuperVisor

След това можете да видите състоянието, като използвате командата:

$ sudo systemctl status supervisor

Как да настроите SuperVisor

Процес на конфигуриране

Конфигурационният файл се намира на адрес /etc/supervisor/supervisord.conf. Това е и мястото, където се намират основните настройки. По-добре е да използвате директорията /etc/supervisor/conf.d/ за конфигуриране на работещите процеси. Основният конфигурационен файл може да бъде оставен по подразбиране. Нека видим как да създадем конфигурационни файлове за програмите. Синтаксисът на раздел за един процес изглежда по следния начин:

променлива име стойност

За всеки процес е необходимо да се подадат такива променливи, за да може той да се стартира автоматично и да се възстановява след срив:

  • directory - работна директория;
  • command - команда за стартиране на процеса;
  • user- потребител, от чието име ще бъде стартиран процесът;
  • autostart - дали процесът трябва да се стартира автоматично;
  • autorestart- дали процесът трябва да бъде рестартиран;

Налични са обаче много повече настройки, ето някои от тях, които ще бъдат разгледани в тази статия:

  • приоритет - приоритет на процеса, който ще бъде стартиран;
  • environment - променливи на средата, които да се предават на процеса;
  • stdout_logfile - къде да се пренасочи изходът stdout на процеса;
  • stderr_logfile - къде да се пренасочи изходът stderr на процеса;
  • process_name- име на процеса, с възможност за заместване на номера на копието;
  • numprocs - брой на копията на процеса, който ще бъде стартиран;
  • startretries - брой опити за стартиране на програмата;
  • redirect_stderr - пренасочване на изхода за грешки на процеса към изхода на супервайзора;
  • redirect_stdout - пренасочване на изхода на процеса към изхода на супервайзора.

За по-добро разбиране и пример, нека изпълним PHP скрипт, който просто ще виси във фонов режим:

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

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

Можете да създадете отделен конфигурационен файл на супервайзора за процеса. Можете да вмъкнете конфигурацията точно в края на основния конфигурационен файл, но е по-добре да не го правите. По-добре е да създадете отделен конфигурационен файл за всяка програма в /etc/supervisor/conf.d/ с име *.conf. Например, за тази програма този файл ще изглежда така:

$ 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

След това трябва да рестартирате supervisor, това може да стане със systemctl:

$ sudo systemctl restart supervisor

или с помощната програма supervisorctl:

$ sudo supervisorctl reload

Как да настроите SuperVisor

Можете също така да видите състоянието на конфигурираните процеси, като използвате командата:

Как да настроите SuperVisor

Ако процесът е в състояние RUNNING, значи всичко е наред и е стартиран успешно. Но в този случай процесът се изпълнява в една инстанция, а доста често се налага да стартирате няколко копия на един и същ процес. За тази цел можем да използваме параметрите process_name и numprocs. Първият ви позволява да промените името на процеса, така че да съдържа номера на копието, а вторият ви позволява да посочите колко копия трябва да бъдат стартирани.

Променливата process_name обикновено съдържа шаблон за форматиране на низ на Python, който съдържа името на програмата и номера на процеса: %(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

Как да настроите SuperVisor

В същото време е възможно всички данни, изведени от програмата, да се запишат в лог файла. За тази цел се използват параметрите stdout_logfile и stderr_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

След рестартиране на услугата журналните файлове ще се появят в папката с програмата:

Как да настроите SuperVisor

По същия начин, ако искате да пренасочите изхода на вашите процеси към стандартния изход на супервайзора, трябва да използвате параметрите redirect_stderr и redirect_stdout. Ако програмата ви се нуждае от някакви променливи на средата, можете да ги предадете с помощта на параметъра environment (среда). Променливите трябва да се записват със запетаи. Например:

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

След всяка промяна в конфигурацията не забравяйте да рестартирате supervisor, за да приложите промените. Помощната програма supervisorctl може да се използва за управление на процеси. Както вече разбрахте, за да видите списъка на процесите, трябва да го изпълните:

$ sudo supervisorctl status

След това, като знаете името на процеса, можете да го рестартирате, например process:process_00:

$ sudo supervisorctl restart process:process_00

Как да настроите SuperVisor

Спрете:

$ sudo supervisorctl stop process:process_00

или да стартирате:

$ sudo supervisorctl start process:process_00

Алтернативно, можете да се свържете с процеса и да видите какво извежда той на stdout/stderr, като използвате командата fg:

$ sudo supervisorctl fg process:process_00

Разгледахме как се конфигурира супервайзор и как се използва софтуерът за управление на процеси.