Запуск процессов в 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 [email protected] events=TICK_60
Если процесс потребляет более 200 МБ памяти, memmon перезапускает его и отправляет уведомление на почту, проверка каждые 60 секунд
При помощи ивентов и собственного скрипта на Pyton можно произвести проверку буквально любого аспекта нужного процесса.
Самое главное
Supervisor — простой и достаточно мощный инструмент для контроля процессов. С правильной настройкой он способен обеспечить бесперебойную работу вашего веб-сервиса.
Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: