Поиск по сайту:

Как установить Supervisor и управлять им


Введение

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

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

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

Предпосылки

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

  • Сервер Linux и пользователь без полномочий root с привилегиями sudo. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве Initial Server Setup with Ubuntu 20.04.

Шаг 1 - Установка

Начните с обновления исходников пакетов и установки Supervisor:

  1. sudo apt update && sudo apt install supervisor

Служба супервизора запускается автоматически после установки. Вы можете проверить его статус:

  1. sudo systemctl status supervisor

Вы должны получить следующий вывод:

Output
● supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago

Теперь, когда у нас установлен Supervisor, мы можем добавить наши первые программы.

Шаг 2 — Добавление программы

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

Все программы, запущенные под Supervisor, должны выполняться в режиме без демонизации (иногда также называемом «режимом переднего плана»). Если по умолчанию ваша программа автоматически возвращается в оболочку после запуска, вам может потребоваться обратиться к руководству программы, чтобы найти возможность включения этого режима, иначе Supervisor не сможет правильно определить статус программы.

Чтобы продемонстрировать функциональные возможности Supervisor, мы создадим сценарий оболочки, который не делает ничего, кроме создания некоторого предсказуемого вывода раз в секунду, но будет непрерывно работать в фоновом режиме, пока не будет остановлен вручную. Используя nano или ваш любимый текстовый редактор, откройте файл с именем idle.sh в вашем домашнем каталоге:

  1. nano ~/idle.sh

Добавьте следующее содержимое:

#!/bin/bash
while true
do 
	# Echo current date to stdout
	echo `date`
	# Echo 'error!' to stderr
	echo 'error!' >&2
	sleep 1
done

Сохраните и закройте файл. Если вы используете nano, нажмите Ctrl+X, затем при появлении запроса Y и Enter.

Затем сделайте ваш скрипт исполняемым:

  1. chmod +x ~/idle.sh

Файлы конфигурации для программ Supervisor расположены в каталоге /etc/supervisor/conf.d, обычно запуская одну программу в каждом файле и заканчиваясь на .conf. Мы создадим файл конфигурации для этого скрипта, как \\/etc/supervisor/conf.d/idle.conf:

  1. sudo nano /etc/supervisor/conf.d/idle.conf

Добавьте это содержимое:

command=/home/ubuntu/idle.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

Мы рассмотрим это построчно:

command=/home/ubuntu/idle.sh

Настройка начинается с определения программы с именем idle и полного пути к программе:

autostart=true
autorestart=true

Следующие две строки определяют автоматическое поведение скрипта при определенных условиях.

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

autorestart определяет, как Supervisor должен управлять программой в случае ее выхода:

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

stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

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

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

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

  1. sudo supervisorctl reread
Output
idle: available

Затем следует сообщить ему о вступлении в силу любых изменений с помощью:

  1. sudo supervisorctl update
Output
idle: added process group

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

На данный момент наша программа должна работать. Мы можем проверить его вывод, просмотрев файл журнала вывода:

  1. sudo tail /var/log/idle.out.log
Output
Sat Nov 20 22:21:22 UTC 2021 Sat Nov 20 22:21:23 UTC 2021 Sat Nov 20 22:21:24 UTC 2021 Sat Nov 20 22:21:25 UTC 2021 Sat Nov 20 22:21:26 UTC 2021 Sat Nov 20 22:21:27 UTC 2021 Sat Nov 20 22:21:28 UTC 2021 Sat Nov 20 22:21:29 UTC 2021 Sat Nov 20 22:21:30 UTC 2021 Sat Nov 20 22:21:31 UTC 2021

Далее мы рассмотрим некоторые другие способы использования Supervisor.

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

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

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

  1. sudo supervisorctl
Output
idle RUNNING pid 12614, uptime 1:49:37 supervisor>

supervisorctl сначала распечатает статус и время работы всех настроенных программ, а затем свою командную строку. Вход в help покажет все доступные команды:

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

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

  1. supervisor> stop idle
Output
idle: stopped
  1. supervisor> start idle
Output
idle: started

Используя команду tail, вы можете просмотреть самые последние записи в журналах stdout и stderr для вашей программы:

  1. supervisor> tail idle
Output
Sun Nov 21 00:36:10 UTC 2021 Sun Nov 21 00:36:11 UTC 2021 Sun Nov 21 00:36:12 UTC 2021 Sun Nov 21 00:36:13 UTC 2021 Sun Nov 21 00:36:14 UTC 2021 Sun Nov 21 00:36:15 UTC 2021 Sun Nov 21 00:36:17 UTC 2021
  1. supervisor> tail idle stderr
Output
error! error! error! error! error! error! error!

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

  1. supervisor> status
Output
idle STOPPED Nov 21 01:07 AM

Наконец, вы можете выйти из supervisorctl, нажав Ctrl+C или введя quit в командной строке:

  1. supervisor> quit

Заключение

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

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