Supervisor linux что это

Обновлено: 07.07.2024

Supervisor - это инструмент мониторинга процессов в системах Linux / Unix. Supervisor - это общая программа управления процессами, разработанная Python. Она может управлять процессами в Linux и отслеживать их, а также превращать общий процесс командной строки в фоновый демон и отслеживать процесс. Состояние, может автоматически перезапускаться при выходе из строя ненормально. Но, как и daemontools, он не может контролировать процесс демона

2. Зачем использовать супервизор

  • Прост в использовании
    Супервизор предоставляет унифицированный способ запуска, остановки и мониторинга ваших процессов. Процессами можно управлять индивидуально или в группах. Вы можете настроить Supervisor в локальной или удаленной командной строке или веб-интерфейсе.
    Многие программы под linux обычно работают все время. Вообще говоря, вам нужно написать скрипт, который может реализовать функцию запуска / остановки / перезапуска / перезагрузки процесса, а затем поместить его в / и т.д. / init.d / ниже. Но у этого есть много недостатков: во-первых, мы должны написать аналогичный скрипт для каждой программы. Во-вторых, когда процесс зависает, Linux не будет автоматически перезапускать его. Если мы хотим перезапустить автоматически, мы должны написать его сами. Скрипт перезапуска мониторинга.
    и супервайзер могут отлично решить эти проблемы. Процесс управления супервизором должен запускать эти управляемые процессы как дочерние процессы супервизора через fork / exec. В этом случае нам нужно только записать путь к исполняемому файлу процесса, которым нужно управлять, в файле конфигурации супервизора, и это нормально. Во-вторых, управляемый процесс является дочерним процессом супервизора. Когда дочерний процесс зависает, родительский процесс может точно получить информацию о зависании дочернего процесса, поэтому, конечно, зависший дочерний процесс может быть автоматически перезапущен. Все равно не перезагружайте, это также зависит от того, установлен ли autostart = true в вашем файле конфигурации.
    Супервизор настраивается с помощью файла конфигурации формата INI, который легко понять. Он предоставляет множество параметров конфигурации для каждого процесса, что позволяет легко перезапустить процесс или автоматически повернуть журнал.
  • Централизованное управление
    Информация о процессах и группах процессов, управляемая супервизором, записана в файле формата ini, и все в порядке. Более того, когда мы управляем супервизором, мы можем управлять им локально или удаленно, а супервизор предоставляет веб-интерфейс, мы можем отслеживать и управлять процессом через веб-интерфейс. Конечно, для локального, удаленного и веб-управления вам нужно вызвать интерфейс супервизора xml_rpc. Это также более поздняя история.
    Супервизор может управлять группами процессов единообразно, что означает, что мы можем записать процессы, которыми нужно управлять, в группу, а затем управлять этой группой как объектом, таким как start, stop, Перезагрузка и тд. Система Linux не имеет этой функции. Если мы хотим остановить процесс, мы можем остановить только один за другим, или мы можем написать скрипт, чтобы остановить его партиями.

3. Компонент супервизора

4. Установка, настройка, использование

Супервизор написан на python и может быть установлен с помощью easy_install и pip. Например, на моей машине centos команда установки выглядит следующим образом:

Или загрузите эту версию:

Если установка прошла успешно, вы можете перейти к следующему шагу: установить файл конфигурации.

Проверьте, слушает ли он

4262139-494899d8542572e5.jpg

Напишите простой скрипт на python ниже, чтобы проверить эффект мониторинга супервизора.

Перезапустите supervisord или перезагрузите файл конфигурации:

4262139-e6b3920ef338a949.jpg

Кроме того, супервизор может быть запущен при запуске системы. Linux запустит скрипт в /etc/rc.local при запуске, поэтому просто добавьте команду выполнения здесь:

6. Супервайзерское управление

Управлять супервизором можно с помощью инструмента командной строки (supervisorctl) или управления веб-интерфейсом. Если вы выполните пошаговые действия, описанные выше, то веб-управление можно использовать в обычном режиме. Это отдельное введение в инструменты управления supervisorctl:

  • update Обновить новую конфигурацию до supervisord (не будет перезапускать ранее запущенную программу)
  • Перезагрузите, загрузите все файлы конфигурации, запустите и управляйте всеми процессами в соответствии с новой конфигурацией (он перезапустит ранее запущенные программы)
  • начать ххх: начать процесс
  • перезапустить ххх: перезапустить процесс
  • stop xxx: остановить определенный процесс (xxx), xxx - это значение, сконфигурированное в [program: theprogramname]
  • Остановить групповую работу: перезапустить все процессы, принадлежащие группе с именем групповая работа (то же самое для запуска и перезапуска)
  • остановите все, остановите все процессы, обратите внимание: запуск, перезапуск, остановка не загрузит последний файл конфигурации
  • перечитайте, когда служба переключается с автоматического запуска на ручной запуск, можно выполнить ее

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

7. Введение в параметры конфигурации супервизора

Файл конфигурации супервизора в основном состоит из нескольких разделов конфигурации, а элементы конфигурации представлены в формате K / V.

Элементы параметров этого блока конфигурации являются глобальными элементами конфигурации процесса супервизора. Параметры этого блока описываются следующим образом:

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

Этот блок является элементом конфигурации программы, которую мы хотим отслеживать. Заголовок блока конфигурации имеет фиксированный формат, ключевое слово program, затем двоеточие, а затем имя программы. Например: [program: foo], foo - это имя программы, при использовании supervisorctl для работы с программой оно помечается как foo. Параметры этого блока описываются следующим образом:

8. Управление кластером

Супервизоры не поддерживают мониторинг процессов между машинами. Супервизор может контролировать только программы на машине, что значительно ограничивает использование супервизоров.

Однако, поскольку сам супервизор поддерживает xml-rpc, существуют также несколько инструментов управления процессами на нескольких машинах, основанные на вторичной разработке супервизора. Такие как:

  • Django-Dashvisor
    Web-based dashboard written in Python. Requires Django 1.3 or 1.4.
  • Nodervisor
    Web-based dashboard written in Node.js.
  • Supervisord-Monitor
    Web-based dashboard written in PHP.
  • SupervisorUI
    Another Web-based dashboard written in PHP.
  • cesi
    cesi is a web interface provides manage supervizors from same interface.

Я не знаю всего вышеперечисленного, и очень сложно попробовать один за другим. Я не могу понять это, кроме последнего.cesiК счастью, я немного знаю о pyhon и едва установил его.

Для получения специальных инструкций по установке, пожалуйста, обратитесь к исходному Readme напрямую. Вот только небольшое объяснение:

В среде многих выделенных серверов часто встречается ряд программ, которые должны работать постоянно, будь то небольшие сценарии оболочки, приложения Node.js, некоторые объемные пакеты.

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

Supervisor – это менеджер процессов, который существенно упрощает управление долго работающими программами, предоставляя простой и понятный интерфейс.

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

Установка Supervisor

Процесс установки Supervisor в системы Ubuntu и Debian предельно прост, поскольку предварительно собранные пакеты можно найти в репозиториях обеих операционных систем.

Чтобы установить Supervisor, запустите следующую команду с привилегиями root:

apt-get install supervisor

После выполнения этой команды демон Supervisor будет уже запущен, поскольку предварительно собранные пакеты поставляются с init-скриптом (благодаря чему Supervisor будет перезапускаться при каждой перезагрузке системы). Чтобы убедиться, что все работает должным образом, наберите:

service supervisor restart

Итак, теперь Supervisor установлен; попробуйте добавить в него некоторые программы.

Настройка Supervisor

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

Примечание: все программы, запущенные через Supervisor, должны работать в режиме non-daemon (который также называется приоритетным режимом). В противном случае Supervisor не сможет определить статус программы. Чтобы включить данный режим, обратитесь к документации и мануалам необходимых программ.

Для примера предположим, что на сервере есть скрипт оболочки, который должен работать постоянно; он находится в /usr/local/bin/long.sh и выглядит так:

Конечно, в практическом смысле, этот сценарий явно бессмысленный, но зато он позволит продемонстрировать основы настройки Supervisor.

Конфигурационные файлы Supervisor находятся в каталоге /etc/supervisor/conf.d (как правило, по файлу с расширением .conf на каждую программу). Простая конфигурация для скрипта, сохраненного в /etc/supervisor/conf.d/long_script.conf, будет иметь такой вид:

[program:long_script] command=/usr/local/bin/long.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

Ниже приведено описание каждой строки и некоторые тонкие настройки, которые могут пригодиться в дальнейшем.

Конфигурация начинается с определения программы и полного пути к ней.

Эти строки определяют базовое автоматическое поведение скрипта в определенных условиях. Опция autostart запускает программу при загрузке системы; значение false заставит включать программу вручную. Опция autorestart определяет, как Supervisor будет управлять программой в случае ее отключения, и имеет три опции:

  • false – Supervisor никогда не будет перезапускать программу после завершения ее работы;
  • true – Supervisor будет всегда перезапускать программу после завершения работы;
  • unexpected – Supervisor будет перезапускать программу только в случае, если она завершила работу из-за возникновения неожиданного кода ошибки (любой стандартный код, кроме 0 и 2).

Последние две строки определяют местонахождение двух основных лог-файлов программы. В соответствии с именами опций, stdout и stderr задают расположение файлов stdout_logfile и stderr_logfile.

Примечание: Если указанного каталога не существует, его нужно создать до запуска программы, поскольку Supervisor не создает отсутствующие каталоги.

Только что созданная конфигурация – это минимальный шаблон для внесения программы в Supervisor. В документации проекта можно найти множество дополнительных опций конфигурации для тонкой настройки.

Создав конфигурационный файл, нужно известить Supervisor о появлении новой программы; для этого используется команда supervisorctl. Сначала Supervisor должен просмотреть каталог /etc/supervisor/conf.d на наличие новых или измененных программ:

Затем можно активировать новые конфигурации:

Примечание: чтобы эти изменения вступили в силу, всегда запускайте две вышеперечисленные команды после редактирования любого конфигурационного файла программы.

На данный момент программа должна быть запущена; это можно проверить при помощи лог-файла:

$ tail /var/log/long.out.log
Sat Jul 20 22:21:22 UTC 2013
Sat Jul 20 22:21:23 UTC 2013
Sat Jul 20 22:21:24 UTC 2013
Sat Jul 20 22:21:25 UTC 2013
Sat Jul 20 22:21:26 UTC 2013
Sat Jul 20 22:21:27 UTC 2013
Sat Jul 20 22:21:28 UTC 2013
Sat Jul 20 22:21:29 UTC 2013
Sat Jul 20 22:21:30 UTC 2013
Sat Jul 20 22:21:31 UTC 2013

Управление программами

После запуска программ, несомненно, наступит момент, когда их понадобится остановить, перезапустить или просмотреть их статус. Ранее упомянутая программа supervisorctl имеет интерактивный режим, который позволяет управлять программами Supervisor.

Чтобы включить интерактивный режим, запустите supervisorctl без аргументов:

$ supervisorctl
long_script RUNNING pid 12614, uptime 1:49:37
supervisor>

После запуска supervisorctl выведет статус и аптайм всех программ, а также откроет командную строку.

Опция help выведет на экран все доступные команды:

supervisor> help
default commands (type help ):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version

Для начала попробуйте запустить, остановить и перезапустить программу при помощи следующих команд (команды start, stop, restart + имя программы):

supervisor> stop long_script
long_script: stopped
supervisor> start long_script
long_script: started
supervisor> restart long_script
long_script: stopped
long_script: started

Команда tail выведет самые последние записи в логах stdout и stderr для заданной программы:

supervisor> tail long_script
Sun Jul 21 00:36:10 UTC 2013
Sun Jul 21 00:36:11 UTC 2013
Sun Jul 21 00:36:12 UTC 2013
Sun Jul 21 00:36:13 UTC 2013
Sun Jul 21 00:36:14 UTC 2013
Sun Jul 21 00:36:15 UTC 2013
Sun Jul 21 00:36:17 UTC 2013
supervisor> tail long_script stderr
error!
error!
error!
error!
error!
error!
error!

Команда status покажет текущее состояние выполнения программы после внесения каких-либо изменений:

supervisor> status
long_script STOPPED Jul 21 01:07 AM

Завершив работу с supervisorctl, закройте интерфейс при помощи комбинации Ctrl-C или команды quit:

Теперь вы знакомы с основами использования Supervisor. Более подробную информацию можно найти в документации проекта. Если у вас есть какие-либо вопросы или дополнения, пожалуйста, оставьте комментарий под этим руководством.


Предполагаем, что у нас имеется запущенный и настроенный Gearman-сервер, воркеры и клиенты, которые периодически что-то хотят от воркеров.

Supervisor

Проблема: Мы запустили Gearman сервер, теперь необходимо запустить n-ое количество различных воркеров.
— Запускать вручную и отвязывать от консоли?
— а как узнать что кто-то упал? и идет ли работа?
— ах, не отвязывать от консоли. Нет, попахивает мазохизмом.

Для решения этих проблем можно использовать Supervisor.

Как говорится в руководстве: Supervisor — клиент-серверная система, которая помогает пользователям мониторить и управлять количеством процессов в Unix-like операционной системе.
С его помощью мы можем демонизировать всех воркеров в нужном количестве, а так же отслеживать их работу
Необходимо для каждого воркера написать отдельный конфиг-файл и поместить его в /etc/supervisor/conf.d/
Конфиг-файл имеет довольно простую структуру:

[program:<worker_name>] — заголовок секции. Нижеследующие параметры будут относится только к этому воркеру(демону)
command — команда на запуск файла. чаще всего путь к исполняемому файлу.
process_name — имя каждого инстанса воркера. Здесь есть тонкость — В мануале указано, что этот параметр не обязательный. Но у меня были проблемы с запуском нескольких инстансов воркера, если его не указывать. Дело в том, что имена процессов должны отличаться. Здесь помимо названия воркера указываем его порядковый номер.
stdout_logfile — говорит само за себя. куда перенаправляем стандартную консоль вывода.
stderr_logfile — то же самое, только для ошибок. Рекомендую указывать эти 2 параметра. Они могут очень выручить, когда придется разбераться почему падают ваши демоны.
autostart — как и следовало ожидать. запускаем воркеров при запуске супервизорда. Как правило при старте системы.
autorestart — уже за один этот параметр стоит использовать супервизор. Рестартует вашего воркера, если тот при выполнении одного из заданий упал с Exception'ом.
startsecs — сколько времени нужно ждать воркера, чтобы он запустился (не обязательный параметр)
numprocs — это второй параметр, за который можно любить супервизора — количество инстансов воркеров.

Контроль и управление демонами

Есть 2 возможности контролировать демоны, запущенные супервизором это консольная утилита supervisorCtl и веб интерфейс.
SupervisorCtl при запуске отображает информацию о статусе демонов:

Здесь все понятно и без объяснений. Можно понять кто работает, кто упал.
С помощью этой утилиты из консоли можно останавливать\запускать демонов, переконфигурировать супервизорд. Довольно интересна команда fg, позволяющая подключится к процессу в фоновом режиме (Он становится привязан к вашей консоли). Довольно удобная вещь для отладки на боевой системе :)

Управление демонами из веб-интерфейса


Помимо консольного интерфейса Супервизор имеет веб-интерфейс:

Попасть в него как правило можно по Url: 127.0.0.1:9211/ В вашем случае порт может отличаться. настройки можно найти в секции

конфиг файла (в моем случае /etc/supervisor/supervisord.conf)

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

Gearman tools

Мониторинг демонов это хорошо. Но как узнать сколько задач на сервере очередей, а сколько и каких задач исполняются в данный момент. Есть как минимум 2 способа:
1) Подключение по telnet к серверу очередей и запрос состояния:


Но ифнормация довольно скудна. и вспомните ли вы через 2 месяца что за цифра в 3ей колонке? Я — точно нет.
2) Есть более красивое решение — утилита gearman_top
Она показывает ту же информацию, но в более удобном виде, и обновление данных происходит в реальном времени.
Устанавивается довольно просто:

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

На любом сервере есть процессы которые должны выполняться постоянно. Например, для веб-сервера это может быть PHP-FPM или любой другой бэкенд (ниже рассмотрим Angular-CLI в development режиме).

Если происходит ситуация, вызванная кратковременными причинами, при которой процесс завершается посетитель сайта увидит серверную ошибку 502. Причиной может быть нехватка памяти и OOM.

И хотя после OOM сервер вновь работоспособен ошибка не исчезнет поскольку процесс завершился. Администратору придется запускать его вручную.

Чтобы этого избежать пишут скрипты для запуска сервисов для systemd или upstart. Или же используют runit. Службы перезапускать может система мониторинга monit.

Пакет устанавливается из репозитория при помощи apt-get install supervisor и очень прост в настройке. Работает так же эффективно как runit, но удобнее него при конфигурации. Достаточно создать файл с настройками и прописать в нем несколько директив.

Основной конфигурационный файл пакета обычно менять не требуется

В нем подключаются все файлы директории conf.d с расширением .conf

Поэтому если нужно добавить новый сервис создается такой файл

[program:ang]
command=ng serve
directory=/home/angular/
stdout_logfile=/var/log/ang.log
autostart=true
autorestart=true
startretries=6
user=root
stopsignal=KILL

Директивы autostart=true и autorestart=true обеспечат перезапуск в случае если сервер по какой-то причине перестал работать. Возможности очень широкие, можно настроить отправку уведомлений на почту (так же может Monit).

После добавления конфигурационного файла supervisor перезапускается. Дальнейшее управление возможно при помощи supervisorctl

ang RUNNING pid 624, uptime 2 days, 2:26:29

Приглашение к вводу команды изменилось, из такого режима можно выполнять те же действия, но без указания supervisorctl . Например, посмотреть справку:

Самые популярные команды при управлении supervisor

На иллюстрации представлен синтаксис любой команды по управлению службой при помощи supervisor

supervisord

Остановит один сервис

Перезапустит все сервисы, о которых знает supervisor

Перечитывает все конфигурационные файлы, сервисы не перезапускает

В случае возникновения ошибок информацию о причинах следует искать в логах supervisor

Или каждого из сервисов (идентификатор генерируется заново при рестарте)

Рассмотренное решение часто применяется для запуска приложений на Ruby, Python и NodeJS. На одном сервере может быть неограниченное количество управляемых сервисов, которым можно отдавать команды по одному или всем вместе.

Monit является другим способом автоматически перезапускать сервисы, которые по каким-то причинам перестали работать.

Читайте также: