Как установить Supervisor на Ubuntu 24

Установка Supervisor на Ubuntu — один пакет apt, а дальше небольшой файл настроек для каждой программы, которую он должен держать запущенной. Supervisor запускает программу при загрузке, перезапускает её после падения и собирает её вывод в журналы. Инструкция для Ubuntu 24.04 и 22.04, примеры — обработчик очередей Laravel и приложение на Node.js.

Установка Supervisor на Ubuntu

sudo apt update sudo apt install -y supervisor sudo systemctl status supervisor --no-pager

Нужна строка Active: active (running). Служба включена и поднимется после перезагрузки. Главный файл — /etc/supervisor/supervisord.conf, а из папки /etc/supervisor/conf.d/ Supervisor читает все файлы *.conf. Туда и кладут свои программы, по файлу на каждую.

Как добавить обработчик очередей Laravel

В документации Laravel queue:work запускают под Supervisor, чтобы обработчики поднимались после сбоя или выкладки. Создайте файл:

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

Вставьте этот текст и поменяйте путь к проекту и пользователя, которому принадлежат его файлы. Сохраните сочетанием Control-O и выйдите через Control-X.

/etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/example.com/artisan queue:work --sleep=3 --tries=3 --max-time=3600 autostart=true autorestart=true stopasgroup=true killasgroup=true user=www-data numprocs=2 redirect_stderr=true stdout_logfile=/var/www/example.com/storage/logs/worker.log stopwaitsecs=3600
  • numprocs=2 — два обработчика работают параллельно, их имена laravel-worker_00 и laravel-worker_01.
  • user — обработчик работает от этого пользователя, а не от root. Укажите владельца файлов проекта.
  • stopwaitsecs — сколько Supervisor ждёт окончания текущей задачи, когда останавливает обработчик. Ставьте больше, чем идёт самая долгая задача.
  • redirect_stderr и stdout_logfile — ошибки и вывод пишутся в один файл журнала.

Как добавить приложение на Node.js

Так же можно запускать любую программу, которая сама не уходит в фон. Для приложения на Node.js создайте файл /etc/supervisor/conf.d/myapp.conf с таким текстом:

/etc/supervisor/conf.d/myapp.conf
[program:myapp] command=/usr/bin/node server.js directory=/var/www/myapp user=www-data autostart=true autorestart=true environment=NODE_ENV="production",PORT="3000" redirect_stderr=true stdout_logfile=/var/log/supervisor/myapp.log

Путь к node указывайте полностью: Supervisor не читает ваш ~/.bashrc. Узнать путь поможет команда:

which node

Node.js из nvm лежит в домашней папке, а её в Ubuntu другие пользователи, например www-data, прочитать не могут. Тогда укажите в user свою учётную запись или возьмите Node.js из NodeSource — он в /usr/bin.

Как применить настройки: supervisorctl reread и update

Сам Supervisor новые файлы не замечает. reread перечитывает настройки, update запускает новые программы и перезапускает изменённые, status показывает, что работает:

sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl status

У каждой программы должно быть RUNNING с номером процесса и временем работы. После любой правки файла в conf.d выполняйте те же три команды.

Команды supervisorctl на каждый день

  • Перезапустить одну программу, например после выкладки: sudo supervisorctl restart myapp Изменённые файлы настроек restart не читает, для этого есть update.
  • Перезапустить все процессы группы: sudo supervisorctl restart "laravel-worker:*" Кавычки нужны, чтобы оболочка не раскрыла *.
  • Остановить программу вручную: sudo supervisorctl stop myapp Запустить снова: sudo supervisorctl start myapp
  • Смотреть вывод программы в реальном времени: sudo supervisorctl tail -f myapp Выход — Control-C.
  • Журналы — там, где указано в stdout_logfile, а собственный журнал Supervisor — /var/log/supervisor/supervisord.log.
  • Laravel после выкладки: php artisan queue:restart Обработчики доделают текущую задачу и завершатся, а Supervisor запустит их снова уже с новым кодом.

Частые проблемы с Supervisor

  • unix:///var/run/supervisor.sock no such file — не запущен сам Supervisor. Запустите его и включите автозапуск: sudo systemctl enable --now supervisor
  • error: <class 'PermissionError'>, [Errno 13] Permission denied — supervisorctl запущен без sudo. Его сокет открыт только для root.
  • ERROR (no such process) или ERROR (no such group) — Supervisor ещё не знает это имя. Выполните reread и update и проверьте, что имя совпадает с указанным в [program:…].
  • FATAL или BACKOFF с Exited too quickly (process log may have details) — команда падает сразу после запуска. Прочитайте журнал программы или запустите команду вручную от того же пользователя, например: sudo -u www-data php /var/www/example.com/artisan queue:work
  • ERROR: CANT_REREAD — ошибка в файле настроек. В сообщении будут файл и строка.

Если вы работаете и на Mac

MacWashing, раздел «Сборка мусора»: найдены мусор Xcode, пользовательский кэш, установщики и журналы, к очистке 22,83 ГБ

Сборка мусора в MacWashing находит кэш всех знакомых ей программ, в том числе спрятанный внутри их данных, а ещё журналы, мусор Xcode и остатки удалённых программ. Она показывает, сколько места занимает каждая находка, и очищает всё за один раз. Всё спорное остаётся без галочки, пока вы не решите.

Бесплатная пробная версия · macOS 14 и новее

Вопросы и ответы

Как установить Supervisor на Ubuntu?

Выполните: sudo apt install supervisor Затем положите файл .conf своей программы в /etc/supervisor/conf.d/ и примените его: sudo supervisorctl reread && sudo supervisorctl update

Запустятся ли программы после перезагрузки?

Да, если у программы autostart=true (так по умолчанию) и служба supervisor включена. Пакет apt включает её при установке.

Что выбрать — Supervisor или systemd?

Оба держат программу запущенной. Supervisor удобен для групп одинаковых обработчиков (numprocs), и именно его описывает документация Laravel. Одну службу так же просто запустить как юнит systemd.