Стаття також доступна російською (перейти до перегляду).
Вступ
- Загальні підходи до керування процесами у 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 пропонує віртуальні сервери з розміщенням в Україні та Польщі. Наші переваги: висока надійність, цілодобова підтримка, велика лінійка тарифних планів спеціалізованих на вирішенні конкретних завдань, автоматичне створення/перестворення VPS сервера з різними Linux - операційними системами та додатковим ПЗ, включаючи панель керування, щоденний безкоштовний бекап віртуальних машин та місце для резервного копіювання даних користувача.
Підписуйтесь на наш телеграм–канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.
Дивіться наш канал Youtube на https://www.youtube.com/freehostua.
Ми у чомусь помилилися, чи щось пропустили?
Напишіть про це у коментарях, ми з задоволенням відповімо та обговорюємо Ваші зауваження та пропозиції.
Дата: 27.02.2023 Автор: Євген
|
|
Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:
comments powered by Disqus