Supervisord – как запустить PHP воркер?

Довольно часто встречаются ситуации, когда необходимо запускать PHP воркеры, слушающие определенный порт. В случае падения скрипта или перезагрузки бэенда, а иногда и сервера, воркер приходится запускать руками, что совсем неудобно и не совсем правильно.
Рекомендую пользоваться популярной утилитой: Supervisord, которая позволяет организовать работу фоновых PHP процессов. Рассмотрим настройку на практике.

Установка Supervisord на CentOS:

yum install supervisor -y
chkconfig supervisord on

Настройка Supervisord:

В файле конфигурации (/etc/supervisord.conf), можно не вносить никакие правки, обычно настроек по-умолчанию достаточно.
Создаем наш конфигурационный файл в подключенной директории: /etc/supervisord.d/

/etc/supervisord.d/php-queue-worker.ini
[program:worker]
command=/usr/bin/php /srv/www/application/push-server.php
numprocs=1
directory=/srv/www/application/
stdout_logfile=/var/log/supervisor/push-server.log
autostart=true
autorestart=true
user=apache
stopsignal=KILL

Обратите внимание на директиву numprocs=1, она указывает что будет запущена одна копия скрипта, если вам нужно больше, укажите свое значение и добавьте выше process_name=%(program_name)s_%(process_num)02d:

/etc/supervisord.d/php-queue-worker.ini
[program:worker]
command=/usr/bin/php /srv/www/application/push-server.php
process_name=%(program_name)s_%(process_num)02d
numprocs=5
directory=/srv/www/application/
stdout_logfile=/var/log/supervisor/push-server.log
autostart=true
autorestart=true
user=apache
stopsignal=KILL

Теперь стартуем Supervisord и видим что он запустил наш скрипт:

# /etc/init.d/supervisord start
Starting supervisord:
worker                           STARTING
# ps aux | grep push-serve[r]
apache   31848  8.8  0.0 481260 17000 ?        Sl   19:41   0:00 /usr/bin/php /srv/www/application/push-server.php

Отлично, теперь Supervisord контролирует работу воркера, можете убить скрипт с помощью kill -6 и проверить что Supervisord его восстановит.
В дополнение немного команд для работы со скриптом supervisorctl:

# перезапуск всех отслеживаемых приложений, без обновления конфигов
service supervisor restart

# перезапуск приложения <app>, без обновления конфига
supervisorctl restart <app>

# обновление конфигов всех приложений, без перезапуска
supervisorctl reread

# перезапуск приложений для которых обновился конфиг
supervisorctl update

Related posts:

  1. НАШИ СКРИПТЫ: DHCP LINUX Скрипт dhcp.pl используется для передачи опции DHCP ‘classless static routes’...
  2. OpenVPN. Объединение филиалов и ЦО. Сегодня речь пойдет о использовании продукта OpenVPN для объединения нескольких...
  3. Настройка OpenVPN сервера на Linksys WRT54GL Настройка OpenVPN сервера на Linksys WRT54GL. Интересное решение для удаленного...
  4. Добавляем заголовок HTTPS в Apache Если SSL настроен на nginx, то до апача обычно не...
You can leave a response, or trackback from your own site.

Оставить комментарий

*