Рубріки: HighloadТеория

Запуск процессов в supervisor

Ігор Грегорченко

Supervisor — это система клиент/сервер, при помощи которой пользователь (администратор) может контролировать подключенные процессы в системах типа UNIX. Инструмент создает процессы в виде под-процессов от своего имени, поэтому имеет полный контроль над ними.

Supervisor состоит из серверной части под названием supervisord, которая создает и управляет всеми процессами, и системного/веб-интерфейса supervisorctl для управления и мониторинга supervisord.

Установка и настройка supervisor

Процесс установки supervisord в Debian предельно прост. Нужно выполнить команду:

apt-get install supervisor

Установка supervisor, необходимо иметь права root

После установки, supervisor нужно сконфигурировать и добавить программы/процессы, которыми он будет управлять. Файл конфигурации по умолчанию находится в /etc/supervisor/supervisord.conf (для Ubuntu, Debian) или /etc/supervisord.conf для других систем(FreeBSD и т.д.).

Для добавления нового процесса (воркера) нужно дополнить файл аналогичным кодом:

[program:worker]

command=/usr/bin/php /var/www/worker.php
stdout_logfile=/var/log/worker.log
autostart=true
autorestart=true
user=www-data
stopsignal=KILL
numprocs=1

Создание воркера для управления процессом PHP

Кратко пройдемся по параметрам

  • [program:worker] — название процесса/воркера, к которому будут относиться все последующие параметры секции;
  • command=/usr/bin/php /var/www/worker.php — команда на запуск файла, то есть путь к нужному файлу;
  • stdout_logfile=/var/log/worker.log — вывод консоли в файл;
  • autostart=true — запуск воркера вместе с запуском supervisor;
  • autorestart=true — перезапуск воркера, если тот по какой-то причине упал;
  • user=www-data — запуск процесса под определенным пользователем;
  • stopsignal=KILL — сигнал остановки (убийства) процесса. Если не определяется, то используется команда по умолчанию — TERM</var>;
  • numprocs=1 — количество инстансов заданного воркера.

В случае, когда требуется запуск сразу нескольких инстансов одного и того же процесса, конфигурация будет иметь вид:

[program:worker]

command=/usr/bin/php /var/www/worker.php
process_name=%(program_name)s_%(process_num)02d
numprocs=10
stdout_logfile=/var/log/worker.log
autostart=true
autorestart=true
user=www-data
stopsignal=KILL

Создание 10 копий процесса

В этом случае добавляется строчка process_name=%(program_name)s_%(process_num)02d, которая задает имена всех копий процесса, в нашем случае worker_00, worker_01 и т.д.

После добавления новых процессов/воркеров не забывайте перезагружать supervisor:

/etc/init.d/supervisor restart

Перезапуск супервизора

Supervisor также включает пользовательский веб-интерфейс supervisorctl, который включается при помощи файла конфигурации. Для этого нужно изменить секцию [inet_http_server], вписав туда верные имя пользователя и пароль:

[inet_http_server]

port=127.0.0.1:9001
;username=some_user_name
;password=some_password

Включение веб-консоли supervisorctl на 9001-м сокете

Теперь всеми доступными процессами можно управлять через браузер. Помните, что после изменения конфига supervisor и/или supervisorctl нужно обновить.

Дополнительные возможности

В supervisor есть встроенный механизм мониторинга событий, при помощи которого система может оповещать об ошибках:

[eventlistener:memmon]

command=memmon -a 200MB -m error@ruhighload.com
events=TICK_60

Если процесс потребляет более 200 МБ памяти, memmon перезапускает его и отправляет уведомление на почту, проверка каждые 60 секунд

При помощи ивентов и собственного скрипта на Pyton можно произвести проверку буквально любого аспекта нужного процесса.

Самое главное

Supervisor — простой и достаточно мощный инструмент для контроля процессов. С правильной настройкой он способен обеспечить бесперебойную работу вашего веб-сервиса.

Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024