Что такое супервизор (supervisor) в контексте DevOps?

Ответ

Супервизор — это системный демон, который запускает, отслеживает и контролирует другие процессы (рабочие процессы, воркеры). Его основная задача — гарантировать, что критически важный процесс будет автоматически перезапущен в случае его падения или завершения. В PHP-проектах супервизор часто используется для управления фоновыми воркерами очередей (например, для Laravel Queues или Symfony Messenger).

Практический пример с Supervisor (пакет для Linux):

  1. Установка: sudo apt-get install supervisor
  2. Конфигурация воркера. Создаем файл /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 — гарантирует автоматический перезапуск при завершении.
  3. Управление:

    # Перечитать конфигурацию и применить изменения
    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):

  1. Ставим эту хрень. Командой в терминал: sudo apt-get install supervisor. Просто и без затей.
  2. Пишем ему конфиг, чтобы он знал, кем командовать. Создаём файлик /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 — это святое, это значит «умрёт — сразу оживи, не жди моего хмурого взгляда».

  3. А теперь начинается магия управления этим зверем:

    # Говорим ему: «Слушай сюда, я тут правила поменял, прочти заново»
    sudo supervisorctl reread
    sudo supervisorctl update
    
    # Кричим: «Всех на работу!»
    sudo supervisorctl start all
    
    # И подходим с проверкой: «Ну как там, работается?»
    sudo supervisorctl status

Альтернативы, блядь, конечно, есть. В мире PHP некоторые умные ребята говорят: «Нахуй нам внешний надсмотрщик, сделаем своего в приложении!». Вот поэтому есть RoadRunner или Swoole. Они сами могут процессы крутить. Но тут прикол в том, что зачастую их самих-то тоже надо чем-то контролировать, чтобы не сбежали. И получается такая рекурсивная хуйня: супервизор следит за RoadRunner'ом, который следит за воркерами. Ёперный театр, но работает, чёрт возьми.