- Установка и управление Supervisor на сервере Ubuntu и Debian
- Установка Supervisor
- Настройка Supervisor
- Управление программами
- Supervisord — инструмент для контроля запущенных процессов в системе
- Установка
- Создание задач для supervisor:
- Наблюдения
- Настройка supervisord на Debian сервере
- Самые популярные команды при управлении supervisor
Установка и управление Supervisor на сервере Ubuntu и Debian
В среде многих выделенных серверов часто встречается ряд программ, которые должны работать постоянно, будь то небольшие сценарии оболочки, приложения 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 и выглядит так:
#!/bin/bash
while true
do
# Echo current date to stdout
echo `date`
# Echo ‘error!’ to stderr
echo ‘error!’ >&2
sleep 1
done
chmod +x /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. Более подробную информацию можно найти в документации проекта. Если у вас есть какие-либо вопросы или дополнения, пожалуйста, оставьте комментарий под этим руководством.
Источник
Supervisord — инструмент для контроля запущенных процессов в системе
Администрирование › Supervisord — инструмент для контроля запущенных процессов в системе
- В этой теме 0 ответов, 1 участник, последнее обновление 2 года, 10 месяцев назад сделано Васильев Владимир Сергеевич.
Для запуска программ с определенными параметрами и отслеживания их состояния. Запуск процессов supervisord производит от своего имени, как под процессы, поэтому контроль остается за визором. Supervisorctl предоставляет системный- и веб-интерфейсы для мониторинга и управления процессами. Вы можете предоставить пользователям доступ на определенные программы, а они в свою очередь смогут видеть состояние этих программ и совершать действия над ними (start, stop, restart). Также имеется XML-RPC интерфейс, которым вы можете пользоваться для написания своих расширений и приложений, которым нужен доступ к Supervisord.
Установка
sudo apt-get install supervisor
Можно установить еще и так, самая свежая версия из питоновского установщика, но для этого нужно еще тянуть кучу пакетов для питона и компиляторов
Для запуска web интерфейса supervisorctl необходимо в файле /etc/supervisor/supervisord.conf проверить наличие секции:
Для работы через nginx c web версией можно написать прокси сервер:
после чего перезапускаем nginx с supervisor’ ом:
При запуске supervisor возникла ошибка: Starting supervisor: Error: Another program is already listening on a port that one of our HTTP. Для решения данной проблемы нужно убить socket supervisor.sock, где находится видно из конфига
$sudo unlink /tmp/supervisor.sock
Далее из браузера заходим на http://sv.dev, и видим, что-то такое (если есть созданные задачи):
Создание задач для supervisor:
Для создания задач, необходимо прописывать конфиги в /etc/supervisor/conf.d/ . Структура файла конфигураций для worker’а supervisor’а:
- [program:] — заголовок секции. Нижеследующие параметры будут относится только к этому воркеру(демону)
- command — команда на запуск файла. чаще всего путь к исполняемому файлу.
- process_name — имя каждого инстанса воркера. Здесь есть тонкость — В мануале указано, что этот параметр не обязательный. Но у меня были проблемы с запуском нескольких инстансов воркера, если его не указывать. Дело в том, что имена процессов должны отличаться. Здесь помимо названия воркера указываем его порядковый номер.
- stdout_logfile — говорит само за себя. куда перенаправляем стандартную консоль вывода.
- stderr_logfile — то же самое, только для ошибок. Рекомендую указывать эти 2 параметра. Они могут очень выручить, когда придется разбераться почему падают ваши демоны.
- autostart — как и следовало ожидать. запускаем воркеров при запуске супервизорда. Как правило при старте системы.
- autorestart — Перазапуск воркера, если тот при выполнении одного из заданий упал с Exception’ом.
- startsecs — сколько времени нужно ждать воркера, чтобы он запустился (не обязательный параметр)
- numprocs — количество инстансов воркеров.
Наблюдения
Иногда при останове supervisor’а остается висеть на порту http сервера python — нужно найти кто висит
sudo netstat -nap | grep 9771
И грохнуть по pid процесс:
Прописать параметры $_SERVER в конфиге supervisor можно через переменную environment:
далее нам эти переменные доступны из $_SERVER[‘HTTP_HOST’] и $_SERVER[‘SOME_SERVER_PARAM’]
В случае появления нового типа задач для гирмана нужно перезапускать по одному воркеру (так мы отловим возможные ошибки и не будем нарушать общую работоспособность системы)
Источник
Настройка supervisord на Debian сервере
На любом сервере есть процессы которые должны выполняться постоянно. Например, для веб-сервера это может быть PHP-FPM или любой другой бэкенд (ниже рассмотрим Angular-CLI в development режиме).
Если происходит ситуация, вызванная кратковременными причинами, при которой процесс завершается посетитель сайта увидит серверную ошибку 502. Причиной может быть нехватка памяти и OOM.
И хотя после OOM сервер вновь работоспособен ошибка не исчезнет поскольку процесс завершился. Администратору придется запускать его вручную.
Чтобы этого избежать пишут скрипты для запуска сервисов для systemd или upstart. Или же используют runit. Службы перезапускать может система мониторинга monit.
Самый простой способ — supervisor (официальный сайт проекта).
Пакет устанавливается из репозитория при помощи 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
Остановит один сервис
Перезапустит все сервисы, о которых знает supervisor
Перечитывает все конфигурационные файлы, сервисы не перезапускает
Используется в паре с предыдущей командой — перезапускает все сервисы, в конфигурационных файлах которых произошли изменения
В случае возникновения ошибок информацию о причинах следует искать в логах supervisor
Или каждого из сервисов (идентификатор генерируется заново при рестарте)
Рассмотренное решение часто применяется для запуска приложений на Ruby, Python и NodeJS. На одном сервере может быть неограниченное количество управляемых сервисов, которым можно отдавать команды по одному или всем вместе.
Monit является другим способом автоматически перезапускать сервисы, которые по каким-то причинам перестали работать.
Источник