Статья также доступна на украинском (перейти к просмотру).
Оглавление
- Общие подходы к управлению процессами в Linux системах
- Программа Supervisor - основные концепции и структура
- Практическое использование 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
Версия 3.8 полностью отвечает условиям для работы программы.
Теперь установим дружественный для приложений, созданных на Python, пакетный менеджер pip:
$ apt install python3-pip
Подтвердим свое согласие на выделение дополнительных 228 Mb, после чего процесс установки менеджера продолжится.
После этого можно начать процесс установки программы Supervisor. Введем в терминале:
$ pip install supervisor
По результатам выполнения мы получили установленную в системе версию Supervisor 4.2.5.
Настройка
Все необходимые настройки приложения можно сделать в файле конфигурации /etc/supervisord.conf, который сначала необходимо создать. Для его заполнения образцовыми настройками системы их можно скопировать из системного хранилища, где приведен пример конфигурационного файла. Просмотреть его содержимое можно с помощью следующей команды:
$ echo_supervisord_conf
Все параметры конфигурационного файла сгруппированы в соответствующих системных разделах и указываются в формате:
[Системное название раздела: пользовательское значение] параметр = значение; комментарий ........................................................ ........................................................ ........................................................ параметр = значение; комментарий
Теперь скопируем образец файла конфигурации в файл supervisord.conf. Для этого введем в терминале:
$ echo_supervisord_conf > /etc/supervisord.conf
Проверим его содержимое с помощью редактора nano:
$ nano /etc/supervisord.conf
Таким образом, наш файл заполнен и находится в нужном городе, то есть там, где программа будет его искать при запуске.
В разделе [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 указывает на запуск команды на переднем плане. Результат ее работы приведен ниже.
Можно убедиться, что наш ворк под названием 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