• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Supervisor: система управления технологическим процессом

Оглавление

Распространенные методы контроля работы Linux процессов в основном опираются на данные PID файлов, которые, как известно, не являются точными. Отсюда непредсказуемость результатов. Кроме того, rc.d сценарии не обеспечивают гарантированного перезапуска процессов, что также вносит элемент нестабильности в процесс управления. И поэтому актуальным является поиск механизма для упрощения и усовершенствования методов управления Linux-процессами. Одним из таких механизмов может быть использование программы Supervisor, которая имеет свою специфику. Рассмотрим ее структуру и основные концепции использования.

Общие подходы к управлению процессами в Linux системах

Стандартным и наиболее распространенным подходом является использование rc.d сценария, который позволяет Администратору обеспечивать выполнение инициализации, перезапуска и других операций по управлению процессами. Однако, такой подход, хотя и гарантирует определенный уровень надежности, имеет существенные недостатки. Основные из них:

  • Трудоемкость написания и последующего сопровождения сценариев;
  • Невозможность обеспечить надежный автоматический перезапуск аварийных процессов.

Указанные недостатки не дают возможности полагаться на стандартный инструментарий, как надежное средство управления системой, особенно высоконагруженной. И поэтому начали появляться альтернативные средства, одним из которых является программа Supervisor.

Программа Supervisor - основные концепции и структура

Программа работает по технологии "клиент-сервер". В качестве серверной части здесь используется компонент под названием supervisord, который, в том числе, отвечает за перезапуск аварийных подпроцессов, запуск дочерних программ и реагирование на команды клиентов. Для ее настройки используется файл конфигурации /etc/supervisord.conf.

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

Supervisor инициирует запуск указанных администратором в настройках воркеров в качестве своих подпроцессов по методу fork/exec и становится для них "владельцем", что дает ему возможность полностью контролировать их работу и, соответственно, предоставлять о них точные данные.

Программа не является заменой системного диспетчера init, а направлена на удобное управление только клиентскими процессами, указанными администратором в настройках. Она предоставляет единый центр управления и мониторинга работы отдельной службы или их группы.

Инструмент имеет интерфейс XML-RPC для управления и отдельный протокол уведомлений, который могут использовать для его мониторинга программные средства, созданные на любом языке программирования.

Supervisor создан на языке Python и имеет точки расширения для этого языка, что может в дальнейшем использоваться разработчиками для его совершенствования.
Работа программы успешно протестирована для операционных систем Mac OS X, FreeBSD, Solaris и Linux.

Практическое использование Supervisor

 Для расширения представления о программном средстве рассмотрим работу с ним на нескольких этапах:

  • Установка;
  • Настройка;
  • Запуск и исполнение.

Инсталляция

Инструмент может работать практически на всех платформах (перечисленных выше), кроме Windows. Также есть определенные условия для языковых средств: наличие Python версии 3.5 или выше и родственных инструментов для функционирования платформы. Мы будем разворачивать Supervisor на платформе Ubuntu 20.04.

Сначала проверим версию Python:

$ python3 --version

Проверка версии Python

Версия 3.8 полностью отвечает условиям для работы программы.

Теперь установим дружественный для приложений, созданных на Python, пакетный менеджер pip:

$ apt install python3-pip

Установка пакетного менеджера pip

Подтвердим свое согласие на выделение дополнительных 228 Mb, после чего процесс установки менеджера продолжится.

Процесс установки pip

Завершение установки pip

После этого можно начать процесс установки программы Supervisor. Введем в терминале:

$ pip install supervisor

Запуск установки Supervisor

По результатам выполнения мы получили установленную в системе версию Supervisor 4.2.5.

Настройка

Все необходимые настройки приложения можно сделать в файле конфигурации /etc/supervisord.conf, который сначала необходимо создать. Для его заполнения образцовыми настройками системы их можно скопировать из системного хранилища, где приведен пример конфигурационного файла. Просмотреть его содержимое можно с помощью следующей команды:

$ echo_supervisord_conf

Просмотр файла конфигурации

Все параметры конфигурационного файла сгруппированы в соответствующих системных разделах и указываются в формате:

[Системное название раздела: пользовательское значение]
параметр = значение; комментарий
........................................................
........................................................
........................................................
параметр = значение; комментарий 

Теперь скопируем образец файла конфигурации в файл supervisord.conf. Для этого введем в терминале:

$ echo_supervisord_conf > /etc/supervisord.conf

Копирование данніх в файл конфигурации.

Проверим его содержимое с помощью редактора nano:

$ nano /etc/supervisord.conf

Просмотр файла конфигурации через nano

Содеожимое файла конфигурации

Таким образом, наш файл заполнен и находится в нужном городе, то есть там, где программа будет его искать при запуске.

В разделе [supervisord] можно настроить параметры log и pid-файлов, параметры маскировки и другие. Пример приведен ниже.

[supervisord]
logfile=/tmp/supervisord.log 
logfile_maxbytes=75MB        
logfile_backups=12           
loglevel=info                
pidfile=/tmp/supervisord.pid 
nodaemon=false               
silent=false                 
minfds=2048                  
minprocs=150                 
umask=024                   
user=supervisord            
identifier=supervisor       
directory=/tmp              
nocleanup=true              
childlogdir=/tmp            
environment=KEY="newtest"   
strip_ansi= true

В разделах [supervisorctl] и [inet_http_server] можно настроить параметры веб-доступа для управления процессами. В частности, номер порта, учетные пользовательские данные для возможности доступа и другие параметры. Примеры настроек приведены ниже.

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock 
serverurl=http://127.0.0.1:9001 
username=alexander              
password=abba                
prompt=mysupervisor         
history_file=~/.sc_history  

[inet_http_server]         
port=127.0.0.1:9001        
username=newuser              
password=jamili

Для возможности использования программы необходимо указать хотя бы один воркер в разделе program файла конфигурации. Например, настроим в качестве ворка системную команду cat. Для этого внесем в указанном разделе следующие изменения:

[program:test]
command=/bin/cat

С помощью редактора nano соответствующее место внесения изменений в файл можно просмотреть ниже на изображении.

Редактирование файла конфигурации и сохранение внесенных данных.

Сохраним внесенные изменения (ctrl+O) и выйдем из редактора (ctrl+X).

Запуск и выполнение

Для запуска серверного процесса инструмента Supervisor используется команда supervisord в следующем формате:

$BINDIR/supervisord –параметр1 ... –параметрN

Где BINDIR – директория, с которой настроена установка языка Python. Интерпретаторы Python используют разные значения BINDIR в зависимости от типа платформы. Например, это может быть директория /usr/local/py/bin или подобная. Для выяснения этого достаточно посмотреть выход команды setup.py install. Также можно использовать команду поиска find. Пример и формат команды приведены ниже.

$ find / -iname supervisord

Параметр –iname позволяет игнорировать регистр написания символов. На выходе можно получить реальный путь к местонахождению файла.

В нашем случае BINDIR это директория /usr/local/bin/.

Команда supervisord имеет большое количество параметров, которые могут быть использованы при запуске. Их можно просмотреть в документации по ссылке http://supervisord.org/.

Когда supervisord запускается, он ищет файл конфигурации в местах, определенных по умолчанию, включая текущую директорию. С точки зрения безопасности лучше указывать при запуске параметр –c, после которого сразу же указывать путь к местонахождению файла. Это поможет уберечься от его замены злоумышленниками.

Осуществим запуск программы на выполнение. Для этого введем в терминале:

$ /usr/local/bin/supervisord -n

Параметр –n указывает на запуск команды на переднем плане. Результат ее работы приведен ниже.

Результат выполнения команды supervisord

Можно убедиться, что наш ворк под названием test был запущен и получил pid = 477854. В терминале выводится и другая информация, касающаяся работы ворка и Supervisor в целом.

Хостинг-провайдер FREEhost.UA предлагает вирутальные сервера с размещением в Украине и Польше. Наши преимущества: высокая надежность, круглосуточная поддержка 24/7, большая линейка тарифных планов специализированных на решении конкретных задач, автоматическое создание/пересоздание VPS сервера с различными Linux - операционными системами и дополнительным ПО, включая панель управления, ежедневный бесплатный бекап виртуальных машин и место для резервного копирования данных пользователя.

Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем-то ошиблись, или что-то пропустили?

Напишите об этом в комментариях на сайте и в телеграм-канале. Мы с удовольствием ответим и обсудим Ваши замечания и предложения.

Дата: 27.02.2023
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA