Supervisor – это менеджер процессов, который существенно упрощает управление долго работающими программами, предоставляя простой и понятный интерфейс.
Supervisor состоит из серверной части под названием supervisord, которая создает и управляет всеми процессами, и системного/веб-интерфейса supervisorctl для управления и мониторинга supervisord.

Установка.

В Debian/Ubuntu можно установить из репозитория:

apt-get install supervisor  

После установки, supervisor нужно сконфигурировать и добавить программы/процессы, которыми он будет управлять.
Файл конфигурации находится в /etc/supervisor/supervisord.conf (для Ubuntu, Debian) или /etc/supervisord.conf для других систем.

Для того чтобы добавить новый процесс (воркер) нужно дополнить файл аналогичным кодом:

[program:worker]
command=/usr/bin/php /var/www/worker.php  
stdout_logfile=/var/log/worker.log  
autostart=true  
autorestart=true  
user=www-data  
stopsignal=KILL  
numprocs=1  

Параметры:

  • [program:worker] — название процесса/воркера, к которому будут относиться все последующие параметры секции;
  • command=/usr/bin/php /var/www/worker.php — путь к исполняемому файлу программы;
  • stdout_logfile=/var/log/worker.log — вывод консоли в файл;
  • autostart=true — запуск воркера вместе с запуском supervisor;
  • autorestart=true — перезапуск воркера, если тот по какой-то причине упал;
  • user=www-data — запуск процесса под определенным пользователем;
  • stopsignal=KILL — сигнал остановки процесса;
  • numprocs=1 — количество инстансов заданного воркера.

После добавления новых процессов/воркеров нужно перезагружать supervisor:

/etc/init.d/supervisor restart

Supervisor дает возможность включить пользовательский веб-интерфейс supervisorctl, который включается при помощи файла конфигурации. Для этого нужно изменить секцию [inet_http_server], вписав туда верные имя пользователя и пароль:

[inet_http_server]
port=127.0.0.1:9001  
;username=some_user_name
;password=some_password

Дополнительные возможности:
В supervisor есть встроенный механизм мониторинга событий, при помощи которого система может оповещать об ошибках:

[eventlistener:memmon]
command=memmon -a 200MB -m error@site.com  
events=TICK_60  
Обновлено 15 сентября 2024 г.