- Установка и управление Supervisor на сервере Ubuntu и Debian
- Установка Supervisor
- Настройка Supervisor
- Управление программами
- Supervisor — как перезапустить, или остановить
- Как перезапустить supervisor
- Добавление новой задачи
- Резюме
- Subscribe to Блог php программиста: статьи по PHP, JavaScript, MySql
- Supervisor не загружает новые файлы конфигурации
- Как исправишь ошибку 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. Более подробную информацию можно найти в документации проекта. Если у вас есть какие-либо вопросы или дополнения, пожалуйста, оставьте комментарий под этим руководством.
Источник
Supervisor — как перезапустить, или остановить
Supervisor — это важная программа, которой я пользуюсь всегда, когда дело доходит до очередей, или консольных программ, требующих постоянной работы в фоне. В прошлых статьях по настройке socket.io и очередям на PHP, как раз и пригодилась утилита — supervisor. В тех статьях была рассмотрена установка supervisor, добавление задач, редактирование. Однако, не менее важной частью считаю рассказать и том, как перезагрузить supervisor, и какие команды для этого существуют.
Как перезапустить supervisor
На самом деле, supervisor позволяет сделать перезагрузку всех процессов несколькими путями.
Для того, чтобы перезапустить все управляемые задачи, добавленные в supervisor нужно выполнить:
Для того, чтобы перезагрузить конкретный процесс:
где — имя вашей задачи, которую нужно перезагрузить
Или же, для перезагрузки всех задач:
Эти команды выполняют перезагрузку всех ранее добавленных задач. Не меняя конфигурационные файлы.
Добавление новой задачи
Если вы создали новый конфиг, и хотите тут же его запустить. Или, если вы хотите применить новые изменения к старым конфигам, и перезапустить все задачи, то вы должны выполнить:
Но, если вы не хотите перезапускать все задачи. Если вы просто хотите обновить все конфиги, то используйте эту команду, которая просканирует все команды, и обновит о них данные:
Команда выше только обновит конфиги о задачах, но не запустит их. Для того, чтобы запустить задачи с новыми конфигурационными данными, необходимо дополнительно выполнить:
И она перезагрузит все задачи, где конфиги были изменены.
Резюме
Это дополнение к предыдущим статьям. Первая часть описана в большой статье по настройке supervisor для сокет сервера. Это лишь ввод часть того, что умеет supervisor. Потому, документация — наше всё.
Subscribe to Блог php программиста: статьи по PHP, JavaScript, MySql
Get the latest posts delivered right to your inbox
Источник
Supervisor не загружает новые файлы конфигурации
У меня проблема с развертыванием приложения Django с использованием Gunicorn и Supervisor. Хотя я могу сделать так, чтобы Gunicorn обслуживал мое приложение (установив правильный PYTHONPATH и выполнив соответствующую команду, например, из конфигурации supervisord), я не могу заставить supervisor запускать его. Он просто не увидит мое приложение. Я не знаю, как убедиться, что файл конфигурации в порядке.
Вот что говорит supervisorctl:
Я запускаю его на Ubuntu 10.04 со следующим конфигом:
В /etc/supervisor/supervisord.conf в конце файла находится:
и вот символическая ссылка на мой конфигурационный файл:
все выглядит хорошо для меня, но supervisorctl просто продолжаю говорить myapp_live: ERROR (no such process) . Любое решение для этого?
У меня была такая же проблема,
сделал свое дело, хотя я не знаю, если это ответ на ваш вопрос.
Правильный ответ заключается в том, что супервизор требует, чтобы вы перечитывали и обновляли при размещении нового файла конфигурации. Перезапуск не является ответом, так как это повлияет на другие службы. Пытаться:
Убедитесь, что ваши файлы conf supervisor заканчиваются на .conf
Мне понадобилось время, чтобы понять это. Надеюсь, это поможет следующему человеку.
Перезагрузка главного процесса супервизора может сработать, но у него будут непредвиденные побочные эффекты, если супервизор контролирует более одного процесса.
Правильный способ сделать это — выполнить команду, supervisorctl reread которая заставляет его сканировать файлы конфигурации на наличие изменений:
Затем просто перезагрузите это приложение:
Я столкнулся с этой проблемой, используя пакет supervisor, версия 3.0a8-1.1 из Ubuntu Server 12.10. Я решил проблему, прочитав встроенную справку:
В частности, вы хотите использовать синтаксис:
Как указано в документации по адресу: http://supervisord.org/configuration.html#programx-section — «Раздел [program: x] фактически представляет« однородную группу процессов »для супервизора (начиная с версии 3.0)». Так что, возможно, проблема впервые появилась в версии 3.0.
У меня была похожая проблема ( myapp_live: ERROR (no such process) ), и это потому, что мое определение процесса было
когда это должно было быть
Хотя это не относится к заданному вопросу, я был здесь в поиске, который ищет решение моей проблемы, так что, надеюсь, другие тоже найдут его здесь.
Я нашел это решение наиболее удобным:
РЕДАКТИРОВАТЬ: перед этим проверьте ваш путь supervisorctl с помощью, which supervisorctl чтобы убедиться, что вы добавляете правильный путь к sudoers.
Добавьте эту строку в файл sudoers, используя visudo (где: myappuser — пользователь, которому нужно перезапустить ваше приложение, myapp — имя приложения):
Вы не привязаны к сценариям запуска дистрибутива и даете пользователю довольно узкие права на перезапуск вашего приложения gunicorn. Кроме того, вам не нужно заботиться о pid. Команда не запрашивает пароль, поэтому она подходит для сценариев bash / fabric с автоматическим развертыванием. С другой стороны — вы должны знать, что если supervisorctl уязвим к некоторой ошибке, вызывающей выполнение кода, злоумышленник может использовать эту привилегию sudo для запуска кода от имени пользователя root (но, насколько я знаю, такой ошибки не было обнаружено для supervisord и найти такую уязвимость очень важно).
Источник
Как исправишь ошибку supervisor?
на VPS c ubuntu 20.04 LTS (GNU/Linux 5.4.0-29-generic x86_64) с версией python3.8 пытаюсь установить supervisor по инструкции: https://www.digitalocean.com/community/tutorials/h.
создал файл, который положил сюда: /etc/supervisor/conf.d
Содержание файла:
[program:besik]
command=python3.8 /root/besik.py
autostart=true
autorestart=true
stderr_logfile=/root/log/besik.err.log
stdout_logfile=/root/log/besik.out.log
сам файл конфигурации:
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; (‘AUTO’ child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the «files» setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf
пытаюсь запустить и получаю:
root@cloth:
Источник