Установка, настройки и управление supervisord

С точки зрения системного администратора supervisord является избыточной сущностью, все функции которой может с успехом заменить система инициализации Linux, которая в настоящее время стала фактическим стандартом для большинства дистрибутивов - systemd. Однако, по непонятным мне причинам, supervisrod очень популярен среди программистов на Python. Наверное системные средства пугают программистов на Python, т.к. разнятся от системы к системе. Скорее всего именно по этой причине программисты на Python избегают использования системных пакетных менеджеров вроде dpkg и apt, зато охотно используют pip, да ещё и в сочетании с virtualenv. В общем, здесь царит своя атмосфера.

Установка supervisord

Тут всё просто, нужно установить всего один пакет:

# apt-get install supervisor

Настройка supervisord

supervisord использует файлы конфигурации, находящиеся в каталоге /etc/supervisor/conf.d/. Файлы имеют формат ini-файлов Windows. Рассмотрим для начала прмер настройки процесса:

[program:ufa]
directory=/home/telemetry/collector/
command=/home/telemetry/collector/collector2_linux_amd64 -config /home/telemetry/collector/config_ufa.yml
autostart=true
autorestart=true
user=telemetry
redirect_stderr=true
stdout_logfile=/home/telemetry/collector/logs/collector_ufa.stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=7
stderr_logfile=/home/telemetry/collector/logs/collector_ufa.stderr.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=7

Здесь настроен процесс ufa. Смысл опций понятен из их названий, поэтому останавливаться на них подробно не стану.

Процессы можно объединять в группы. Ниже приведён пример настройки группы collectors, в которую входят процессы ufa и okt:

[group:collectors]
programs=ufa,okt

Подробнее о других настройках можно почитать в текстовом файле /usr/share/doc/supervisor/examples/sample.conf.gz, который входит в состав пакета.

Более подробную документацию можно найти на сайте проекта supervisord.org. В частности, там есть раздел, посвящённый файлу конфигурации supervisord.org/configuration.html.

Управление supervisord

Управление производится при помощи утилиты supervisorctl. Можно как указывать команды утилите прямо в командной строке, так и запустить её в диалоговом режиме и вводить их в ответ на приглашение утилиты.

Например, для просмотра состояния запущенных процессов можно указать команду status в аргументах:

# supervisorctl status

Или можно запустить утилиту в диалоговом режиме и ввести команду status в ответ на приглашение:

# supervisorctl
supervisor> status
collectors:okt                   RUNNING   pid 2721, uptime 0:00:07
collectors:ufa                   RUNNING   pid 2551, uptime 0:02:04

Наиболее полезные команды управления:

  • status <группа:процесс> - просмотр состояния процесса в группе,
  • start <группа:процесс> - запуск процесса в группе,
  • stop <группа:процесс> - останов процесса в группе,
  • restart <группа:процесс> - перезапуск процесса в группе,
  • reread - перечитать файл конфигурации из файловой системы, не выполняя никаких других действий,
  • update - перечитать файл конфигурации из файловой системы, остановить и удалить пропавшие группы и процессы, добавить и запустить новые группы и процессы.

Для выполнения одной команды надо всеми процессами группы вместо имени процесса можно указать звёздочку. Если процесс не состоит в группе, то можно указать его имя. Если не указывать группу или процесс, то команда будет выполнена надо всеми процессами в группе или надо всеми процессами.