У меня есть потребитель AMQP (потребитель RabbitMQ), написанный на PHP всегда активен в фоновом режиме. Этот скрипт запускается на нескольких узлах и 12 раз на узел: 12 фоновых процессов Unix работают:
php -f consumer.php &
,
Если необходимо развернуть новую версию кода, на данный момент мне всегда приходится вручную уничтожать ВСЕ эти процессы и снова запускать их по одному на каждом узле.
Нашел ответ в Laravel docs (решение работает для любого всегда работающего фонового процесса, а не только для PHP и Laravel). Руководитель!
Настройка супервизора
Файлы конфигурации супервизора обычно хранятся в каталоге /etc/supervisor/conf.d. В этом каталоге вы можете создать любое количество файлов конфигурации, которые инструктируют супервизора, как следует отслеживать ваши процессы. Например, давайте создадим файл laravel-worker.conf, который запускает и отслеживает процесс queue: work:
Начальный руководитель
После того, как файл конфигурации был создан, вы можете обновить конфигурацию Supervisor и запустить процессы, используя следующие команды:
перечитать sudo supervisorctl
обновление sudo supervisorctl
sudo supervisorctl start laravel-worker: *
Это даже поможет мне запустить столько процессов, сколько мне нужно, с помощью одного файла конфигурации и одной команды. Опять же, из документов Laravel:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
По телефону sudo supervisorctl start laravel-worker:*
Будет запущено 8 фоновых процессов, которые также будут перезапущены в случае ошибки.
Если я просто хочу перезапустить новую выпущенную версию, я restart
команда напрямую:
supervisorctl restart laravel-worker:*
Я просто включу это как задачу Deployer в мой конвейер CI / CD.
Других решений пока нет …