Ответ
Супервизор — это системный демон, который запускает, отслеживает и контролирует другие процессы (рабочие процессы, воркеры). Его основная задача — гарантировать, что критически важный процесс будет автоматически перезапущен в случае его падения или завершения. В PHP-проектах супервизор часто используется для управления фоновыми воркерами очередей (например, для Laravel Queues или Symfony Messenger).
Практический пример с Supervisor (пакет для Linux):
- Установка:
sudo apt-get install supervisor - Конфигурация воркера. Создаем файл
/etc/supervisor/conf.d/laravel-worker.conf:[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600 directory=/var/www/html autostart=true autorestart=true stopasgroup=true killasgroup=true user=www-data numprocs=8 redirect_stderr=true stdout_logfile=/var/log/supervisor/laravel-worker.log stopwaitsecs=3600numprocs=8— запускает 8 процессов воркера для параллельной обработки.autorestart=true— гарантирует автоматический перезапуск при завершении.
-
Управление:
# Перечитать конфигурацию и применить изменения sudo supervisorctl reread sudo supervisorctl update # Запустить все процессы sudo supervisorctl start all # Проверить статус sudo supervisorctl status
Альтернативы в PHP-мире: Для управления долгоживущими PHP-процессами также используются менеджеры процессов, встроенные в сами приложения, например, RoadRunner или Swoole, которые могут работать без внешнего супервизора, но часто сами требуют надзора со стороны systemd или Supervisor.
Ответ 18+ 🔞
Блин, слушай, вот есть такая штука — супервизор. Ну не тот, который на заводе стоит и за тобой следит, а системный демон такой. Представь себе злого, но справедливого надсмотрщика, который пинками заставляет работать других. Его главная задача — чтобы какой-то важный процесс, если он вдруг сдох или самовольно завершился, тут же, блядь, воскрес как феникс. Автоматически, без твоего участия. В PHP-шных делах его часто используют, чтобы воркеры очередей (ну, те, что фоновые задачи обрабатывают в Laravel или Symfony) не разбегались и работали как часы.
Вот, смотри, как это на практике выглядит (на примере этого самого Supervisor в Linux):
- Ставим эту хрень. Командой в терминал:
sudo apt-get install supervisor. Просто и без затей. - Пишем ему конфиг, чтобы он знал, кем командовать. Создаём файлик
/etc/supervisor/conf.d/laravel-worker.confи пишем туда наставления:[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/html/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600 directory=/var/www/html autostart=true autorestart=true stopasgroup=true killasgroup=true user=www-data numprocs=8 redirect_stderr=true stdout_logfile=/var/log/supervisor/laravel-worker.log stopwaitsecs=3600Смотри, тут прикол:
numprocs=8— это он запустит сразу 8 воркеров, чтобы они параллельно задачи жрали, овердохуища производительности. Аautorestart=true— это святое, это значит «умрёт — сразу оживи, не жди моего хмурого взгляда». -
А теперь начинается магия управления этим зверем:
# Говорим ему: «Слушай сюда, я тут правила поменял, прочти заново» sudo supervisorctl reread sudo supervisorctl update # Кричим: «Всех на работу!» sudo supervisorctl start all # И подходим с проверкой: «Ну как там, работается?» sudo supervisorctl status
Альтернативы, блядь, конечно, есть. В мире PHP некоторые умные ребята говорят: «Нахуй нам внешний надсмотрщик, сделаем своего в приложении!». Вот поэтому есть RoadRunner или Swoole. Они сами могут процессы крутить. Но тут прикол в том, что зачастую их самих-то тоже надо чем-то контролировать, чтобы не сбежали. И получается такая рекурсивная хуйня: супервизор следит за RoadRunner'ом, который следит за воркерами. Ёперный театр, но работает, чёрт возьми.