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