• База знань
  • /
  • Блог
  • /
  • 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 пропонує віртуальні сервери з розміщенням в Україні та Польщі. Наші переваги: висока надійність, цілодобова підтримка, велика лінійка тарифних планів спеціалізованих на вирішенні конкретних завдань, автоматичне створення/перестворення VPS сервера з різними Linux - операційними системами та додатковим ПЗ, включаючи панель керування, щоденний безкоштовний бекап віртуальних машин та місце для резервного копіювання даних користувача.

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

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.

 

Дата: 27.02.2023
Автор: Євген
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA