Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Laravel: supervisor, production, fpm

Настройка воркеров: Supervisor / PHP-FPM в контексте очередей

Этот вопрос проверяет понимание того, как организовать фоновую обработку задач в PHP-приложениях, используя очереди и инструменты для управления долгоживущими процессами.

Короткий ответ

Воркеры — это фоновые процессы, которые постоянно запущены и обрабатывают задачи из очереди, например, отправку email или генерацию отчетов. PHP-FPM не предназначен для долгоживущих процессов, он создает и завершает PHP-процессы для быстрой обработки веб-запросов. Supervisor — это программа, которая следит за тем, чтобы воркеры всегда были запущены, автоматически перезапуская их в случае падения или завершения. Таким образом, для очередей используют отдельные PHP-скрипты (воркеры), а Supervisor обеспечивает их постоянную работу.

Длинный ответ

Роль воркеров в обработке очередей

Очереди задач (например, в Laravel с использованием Redis или RabbitMQ) позволяют отложить трудоемкие операции, чтобы не задерживать ответ пользователю. Воркер — это процесс, который в бесконечном цикле проверяет очередь и выполняет попавшие в нее задачи.

Почему PHP-FPM не подходит для воркеров

  • Модель выполнения: PHP-FPM работает по принципу "запрос-ответ". Он запускает интерпретатор PHP для обработки каждого HTTP-запроса и завершает его работу после отправки ответа.

  • Время жизни: Воркер же должен работать постоянно, чтобы проверять очередь каждую секунду. Долгоживущий процесс в среде PHP-FPM не предусмотрен и может привести к утечкам памяти и нестабильности.

Назначение Supervisor

Supervisor — это демон-процесс, чья задача — управлять другими процессами. В контексте очередей его обязанности:

  • Запуск воркеров: Он стартует указанное количество PHP-воркеров.

  • Контроль состояния: Постоянно проверяет, работают ли эти процессы.

  • Автоперезапуск: Если воркер завершился (из-за ошибки или по плану), Supervisor автоматически запускает его заново.

  • Логирование: Перенаправляет стандартный вывод и ошибки воркеров в файлы логов.

Пример настройки

Конфигурационный файл для Supervisor (/etc/supervisor/conf.d/laravel-worker.conf):

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/project/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/log/laravel-worker.log

В этом примере:

  • command — запускает воркер Laravel для обработки очереди.

  • numprocs=2 — Supervisor будет поддерживать два рабочих процесса одновременно.

  • autorestart=true — гарантирует автоматический перезапуск.

Вывод:

  • Используйте PHP-FPM для обработки веб-запросов от пользователей.

  • Используйте Supervisor для поддержания работы фоновых PHP-воркеров, которые обрабатывают задачи из очередей. Это стандартный и надежный подход в экосистеме PHP.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • Laravel

    Laravel

Ключевые слова

#supervisor

#production

#fpm

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.