Ответ
В production-окружении за обработчиками очередей (воркерами) следят менеджеры процессов, которые гарантируют их постоянную работу и перезапуск при сбоях. В моих проектах на PHP/Laravel это обычно Supervisor.
Почему Supervisor? Он прост в настройке, надежен и интегрируется с системными логами.
Пример конфигурации Supervisor (/etc/supervisor/conf.d/laravel-worker.conf) для Laravel:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/my-project/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
directory=/var/www/my-project
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=8 ; Запускаем 8 процессов для параллельной обработки
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-worker.log
Ключевые параметры воркера и их смысл:
--sleep=3— пауза (в секундах) при отсутствии заданий, чтобы снизить нагрузку на CPU.--tries=3— количество попыток выполнения задания перед помещением в очередь неудач (failed jobs).--max-time=3600— максимальное время жизни одного ворк-процесса (в секундах). Через час процесс будет перезапущен Supervisor'ом для предотвращения утечек памяти.numprocs=8— количество параллельных процессов-воркеров. Определяется эмпирически, исходя из нагрузки и ресурсов сервера.
Альтернативы и дополнения:
- Horizon — панель управления для очередей Laravel с детальным мониторингом, метриками и балансировкой. Я использовал его в проектах с высокой нагрузкой на очереди.
- Systemd — может использоваться вместо Supervisor, особенно в современных дистрибутивах.
- Kubernetes — в облачных микросервисных архитектурах воркеры запускаются как отдельные deployment'ы с настройками liveness/readiness проб.
Мониторинг состояния воркеров осуществляется через логи Supervisor, панель Horizon или общие системы мониторинга (например, Prometheus + Grafana).