Установка и управление Supervisor на сервере Ubuntu и Debian
В среде многих выделенных серверов часто встречается ряд программ, которые должны работать постоянно, будь то небольшие сценарии оболочки, приложения Node.js, некоторые объемные пакеты.
Конечно, для каждой из этих программ можно написать init-скрипт, но такой подход требует больших затрат времени и ресурсов и не всегда понятен новичкам.
Supervisor – это менеджер процессов, который существенно упрощает управление долго работающими программами, предоставляя простой и понятный интерфейс.
Примечание: Для выполнения данного руководства необходимо уметь работать с командной строкой и устанавливать пакеты, а также иметь базовые навыки управления сервером.
Установка Supervisor
Процесс установки Supervisor в системы Ubuntu и Debian предельно прост, поскольку предварительно собранные пакеты можно найти в репозиториях обеих операционных систем.
Чтобы установить Supervisor, запустите следующую команду с привилегиями root:
SUPERVISOR ► Линуксовые Фишечки #13
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!’ > значение false заставит включать программу вручную. Опция autorestart определяет, как Supervisor будет управлять программой в случае ее отключения, и имеет три опции:
- false – Supervisor никогда не будет перезапускать программу после завершения ее работы;
- true – Supervisor будет всегда перезапускать программу после завершения работы;
- unexpected – Supervisor будет перезапускать программу только в случае, если она завершила работу из-за возникновения неожиданного кода ошибки (любой стандартный код, кроме 0 и 2).
Последние две строки определяют местонахождение двух основных лог-файлов программы. В соответствии с именами опций, stdout и stderr задают расположение файлов stdout_logfile и stderr_logfile.
Разработка, supervisor
Примечание: Если указанного каталога не существует, его нужно создать до запуска программы, поскольку 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. Более подробную информацию можно найти в документации проекта. Если у вас есть какие-либо вопросы или дополнения, пожалуйста, оставьте комментарий под этим руководством.
Источник: www.8host.com
Настройка supervisor
Для управления процессами в Linux существуют системы инициализации, такие как systemd. Однако что, если надо что-то более простое, программа, которая сможет управлять процессами вашего приложения, в системе или в Docker контейнере. Такая программа существует. Она называется supervisor.
Это простой менеджер процессов с открытым исходным кодом, написанный на Python, с помощью которого можно запускать нужное количество копий процесса и следить за их состоянием. В этой статье мы рассмотрим как выполняется установка и настройка Supervisor на примере Ubuntu 20.04.
Установка Supervisor в Ubuntu 20.04
Самый простой способ получить программу — установить её из официальных репозиториев. Для этого надо выполнить команду:
sudo apt install supervisor
Если вы хотите чтобы программа работала постоянно, её надо добавить в автозагрузку и запустить. Для этого выполните:
sudo systemctl enable supervisor —now
Затем можно посмотреть состояние с помощью команды:
sudo systemctl status supervisor
Настройка supervisor
Конфигурационный файл программы находится по адресу /etc/supervisor/supervisord.conf. Здесь находятся основные настройки. Для настроек запускаемых процессов лучше использовать директорию /etc/supervisor/conf.d/. Основной конфигурационный файл можно оставить по умолчанию. Давайте рассмотрим как создавать конфигурационные файлы для программ. Синтаксис секции для одного процесса выглядит вот так:
[ program : имя_программы ]
имя_переменной = значение
Для каждого процесса минимально надо передать такие переменные для того чтобы он автоматически запускался и восстанавливался после падения:
- directory — рабочая директория;
- command — команда запуска процесса;
- user — пользователь, от имени которого будет запущен процесс;
- autostart — нужно ли автоматически запускать процесс;
- autorestart — нужно ли перезапускать процесс;
Однако доступных настроек намного больше, вот некоторые из тех, которые будут рассмотрены в данной статье:
- priority — приоритет запускаемого процесса;
- environment — переменные окружения, которые надо передать процессу;
- stdout_logfile — куда перенаправлять вывод stdout процесса;
- stderr_logfile — куда перенаправлять вывод stderr процесса;
- process_name — название процесса, с возможностью подстановки номера копии;
- numprocs — количество запускаемых копий процесса;
- startretries — количество попыток запустить программу;
- redirect_stderr — перенаправить вывод ошибок процесса в вывод supervisor;
- redirect_stdout — перенаправить вывод процесса в вывод supervisor.
Для примера можно реализовать скрипт на PHP, который будет просто висеть в фоне:
sudo vi /home/sergiy/program/process.php
Теперь для этого процесса можно создать конфигурационный файл supervisor. Вы можете вставлять конфигурацию прямо в конец основного конфигурационного файла, но так лучше не делать. Лучше для каждой программы создавать отдельный конфигурационный файл в каталоге /etc/supervisor/conf.d/ с именем *.conf. Например, для этой программы этот файл будет выглядеть вот так:
sudo vi /etc/supervisor/conf.d/process.conf
[program:process]
directory=/home/sergiy/program/
command=/usr/bin/php process.php
user=sergiy
autostart=true
autorestart=true
Затем надо перезапустить supervisor, это можно сделать с помощью systemctl:
sudo systemctl restart supervisor
Или с помощью утилиты supervisorctl:
sudo supervisorctl reload
Затем вы можете посмотреть состояние настроенных процессов с помощью команды:
Если процесс находится в состоянии RUNNING, значит всё хорошо и он был запущен успешно. Однако сейчас процесс запущен в одном экземпляре, а довольно часто надо запустить несколько копий одного и того же процесса. Для этого можно воспользоваться параметрами process_name и numprocs. Первый позволяет модифицировать имя процесса, так чтобы оно содержало номер копии, а второй указывает сколько копий надо запустить.
В переменную process_name обычно прописывается шаблон форматирования строки python, который содержит название программы и номер процесса: %(program_name)s_%(process_num)02d. Здесь с скобках находится имя переменной, а за ними её тип. Например, для запуска той же программы в четыре потока конфигурационный файл надо привести к такому виду:
sudo vi /etc/supervisor/conf.d/process.conf
[program:process]
directory=/home/sergiy/program/
command=/usr/bin/php process.php
user=sergiy
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
numprocs=4
Теперь надо снова перезагрузить supervisorctl и уже будет запущено 4 процесса:
sudo supervisorctl status
Кроме того можно сохранять всё, что выводит программа в лог файл. Для этого используются параметры stdout_logfile и stderr_logfile. Например, можно прямо в папке с программой, выводить лог файл её выполнения.
sudo vi /etc/supervisor/conf.d/process.conf
[program:process]
directory=/home/sergiy/program/
command=/usr/bin/php process.php
user=sergiy
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
numprocs=4
stdout_logfile=/home/sergiy/program/process.log
stderr_logfile=/home/sergiy/program/process.log.error
После перезагрузки сервиса в папке с программой появятся логи:
Аналогично, если вы хотите перенаправить вывод ваших процессов в стандартный вывод supervisor, следует использовать параметры redirect_stderr и redirect_stdout. Если вашей программе нужны какие-либо переменные окружения, вы можете их передать с помощью параметра environment. Переменные надо записать через запятую. Например:
После каждого изменения конфигурации не забывайте перезапускать supervisor, для того чтобы применить изменения. С помощью утилиты supervisorctl можно управлять процессами. Как вы уже поняли, для того чтобы посмотреть список процессов надо выполнить:
sudo supervisorctl status
Далее, зная имя процесса, его можно перезапустить, например process:process_00:
sudo supervisorctl restart process:process_00
sudo supervisorctl stop process:process_00
sudo supervisorctl start process:process_00
Кроме того, можно подключится к процессу и посмотреть что он выводит в stdout/stderr с помощью команды fg:
sudo supervisorctl fg process:process_00
Выводы
В этой статье мы рассмотрели как выполняется настройка supervisor, а также как пользоваться программой для управления процессами. Как видите программа довольно удобна и проста в использовании. Особенно её удобно применять в Docker, из-за ограничения на один запущенный процесс в контейнере. Вы можете запустить только supervisor, а все остальные процессы настроить в нём.
Источник: losst.pro
Русские Блоги
Supervisor — это инструмент управления процессами, реализованный на Python, который может легко запускать, закрывать, перезапускать, просматривать и отслеживать процессы. Когда процесс завершается с ошибкой или по какой-либо причине происходит сбой, он может автоматически перезапускаться и отправлять уведомления о событиях. Supervisor можно описать как инструмент эксплуатации и обслуживания.Использование Supervisor для управления процессами может улучшить характеристики высокой доступности системы.
Примечание: Супервизор управляет этими процессами как своими собственными дочерними процессами, а супервизоры не могут управлять процессами, работающими как демоны. Супервизоры могут управлять только процессами, выполняемыми на переднем плане.
Знакомство с супервайзером:
Supervisor включает следующие четыре компонента.
supervisord
Основная функция серверной программы — запуск службы супервизора и управляемых ею подпроцессов, запись журналов, перезапуск сбойных подпроцессов и т. Д.
supervisorctl
Клиентская программа командной строки, которая предоставляет интерфейс, подобный оболочке, обменивается данными с процессом супервизора через сокет домена UNIX или сокет TCP и использует протокол XML_RPC. Его основная функция — управлять дочерними процессами (запускать, закрывать, перезапускать, просматривать статус).
Web Server
Осознайте процесс управления в интерфейсе, но также просмотрите журнал процесса и очистите журнал.
XML-RPC интерфейс
Супервизором можно удаленно управлять через протокол XML_RPC для доступа к supervisorctl и Интернету.
Та же функция управления, что и сервер.
Вот несколько общих инструкций по статусу супервизора:
running: процесс запущен запуск: после того, как Supervisor получает запрос на запуск, процесс находится в процессе запуска остановлено: процесс завершен остановка: после того, как супервизор получает запрос на отключение, процесс завершается откат: после того, как процесс вошел в начальное состояние, он не смог войти в рабочее состояние, потому что он немедленно вышел фатальный: процесс не начался нормально exited: процесс вышел из рабочего состояния
Во-первых, установка супервайзера
1. Проверьте среду хоста:
cat /proc/version
Установить супервизор:
yum install python-setuptools
pip install supervisor
Проверьте, успешна ли установка (используйте команду echo_supervisord_conf, чтобы убедиться, что следующие файлы конфигурации работают успешно)
[[email protected] ~]# echo_supervisord_conf ; Sample supervisor config file. ; ; For more information on the config file, please see: ; http://supervisord.org/configuration.html ; ; Notes: ; — Shell expansion («~» or «$HOME») is not supported. Environment ; variables can be expanded using this syntax: «%(ENV_HOME)s». ; — Quotes around values are not supported, except in the case of ; the environment= options as shown below. ; — Comments must have a leading space: «a=b ;comment» not «a=b;comment». ; — Command will be truncated if it looks like a config file comment, e.g. ; «command=bash -c ‘foo ; bar'» will truncate to «command=bash -c ‘foo «. [unix_http_server] file=/tmp/supervisor.sock ; the path to the socket file ;chmod=0700 ; socket file mode (default 0700) ;chown=nobody:nogroup ; socket file uid:gid owner ;username=user ; default is no username (open server) ;password=123 ; default is no password (open server) ;[inet_http_server] ; inet (TCP) server disabled by default ;port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface ;username=user ; default is no username (open server) ;password=123 ; default is no password (open server) .
2. Создайте файл конфигурации.
Создать каталог файла конфигурации супервизора / etc / supervisor /
mkdir -m 755 -p /etc/supervisor/
Создайте основной файл конфигурации supervisord.conf
echo_supervisord_conf > /etc/supervisor/supervisord.conf
Создать каталог файла конфигурации проекта
mkdir -m 755 conf.d
Здесь мы вкрапляем файл конфигурации супервизора supervisors.conf:
~]# cat /etc/supervisord.conf ; Sample supervisor config file. ; ; For more information on the config file, please see: ; http://supervisord.org/configuration.html ; ; Notes: ; — Shell expansion («~» or «$HOME») is not supported. Environment ; variables can be expanded using this syntax: «%(ENV_HOME)s». ; — Comments must have a leading space: «a=b ;comment» not «a=b;comment». [unix_http_server] file = / tmp / supervisor.sock; (путь к файлу сокета) ; chmod = 0700; права доступа к файлу сокета (по умолчанию 0700) ; chown = никто: nogroup; владелец файла сокета: группа ; username = user; (пользователь, запустивший http (открытый сервер)) ; пароль = 123; (пароль по умолчанию (открытый сервер)) ; [inet_http_server]; Отключить службу http, контролируемую tcp по умолчанию ; port = 127.0.0.1: 9001; (укажите прослушивание локального IP-адреса и порта) ; username = user; (пользователь, который по умолчанию запускает службу http) ; пароль = 123; (пароль по умолчанию) [supervisord] logfile = / tmp / supervisord.log; (Место хранения основного файла журнала, по умолчанию в рабочем каталоге запуска программы) logfile_maxbytes = 50 МБ; (Максимальное значение основного файла журнала, который будет вырезан позже; по умолчанию 50 МБ) logfile_backups = 10; (количество резервных копий основного файла журнала; по умолчанию 10) loglevel = info; (уровень журнала; по умолчанию информация; другие: отладка, предупреждение, трассировка) pidfile = / tmp / supervisord.pid; (путь к pid-файлу при запущенном супервизоре; по умолчанию supervisord.pid) nodaemon = false; (Если true, программа будет работать на переднем плане; по умолчанию false) minfds = 1024; (минимальное количество допустимых файловых дескрипторов для запуска; по умолчанию 1024) minprocs = 200; (мин. действительный дескриптор процесса; по умолчанию 200) ; umask = 022; (разрешение по умолчанию для создания файла процесса; по умолчанию 022) ; user = chrism; (По умолчанию — текущий запущенный пользователь) ; идентификатор = супервизор; (идентификатор супервизора, по умолчанию ‘супервизор’) ; directory = / tmp; (Время запуска по умолчанию не будет переключаться) ; nocleanup = true; (Не очищать временные файлы при запуске; значение по умолчанию — false) ; childlogdir = / tmp; (‘AUTO’ каталог журнала дочернего процесса, по умолчанию $ TEMP) ; environment = KEY = «значение»; (Добавьте пару «ключ-значение» переменной среды: ключ = «значение») ; strip_ansi = false; (Удалить escape-код ansi в журнале; по умолчанию false) ; Некоторые из следующих параметров должны быть сохранены в файле конфигурации RPC ; (supervisorctl / веб-интерфейс) Используйте следующую конфигурацию для управления ; added by defining them in separate rpcinterface: sections [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket ;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket ;username=chris ; should be same as http_username if set ;password=123 ; should be same as http_password if set ;prompt=mysupervisor ; cmd line prompt (default «supervisor») ;history_file=~/.sc_history ; use readline history if available ; Ниже приводится управляемый пример программы, показывающий все возможные конфигурации. ; Создайте одну или «несколько» программ: следуйте приведенным ниже правилам пары ключ-значение. ; supervisor. ;[program:theprogramname] ; command = / bin / cat; Запустить команду программы (использовать абсолютный путь) ; process_name =% (program_name) s; process_name означает (по умолчанию% (program_name) s) ; numprocs = 1; Количество процессов при запуске (по умолчанию 1) ; directory = / tmp; Каталог, в который нужно переключиться во время выполнения (def no cwd) ;umask=022 ; umask for process (default None) ; priority = 999; Относительный приоритет запуска (по умолчанию 999) ; autostart = true; Следует ли запускать программу мониторинга с программой супервизора (по умолчанию: true) ; startsecs = 1; # В установленное время программа должна продолжать работу (по умолчанию 1) ; startretries = 3; Максимальное количество попыток при сбое запуска (по умолчанию 3) ; autorestart = неожиданно; Если после выхода из какого статуса выйти для перезапуска, по умолчанию не является неожиданным (по умолчанию: неожиданно) ; exitcodes = 0,2; ‘ожидается’ Перезапустить после встречи с кодом выхода (по умолчанию 0,2) ; stopignal = QUIT; Сигнал, используемый для завершения процесса (TERM по умолчанию) ; stopwaitsecs = 10; Максимальное время ожидания в секундах SIGKILL (по умолчанию 10) ; stopasgroup = false; Отправить сигнал остановки группе процессов Unix (по умолчанию false) ; killasgroup = false; Группа процессов SIGKILL UNIX (по умолчанию false) ;user=chrism ; setuid to this UNIX account to run the program ; redirect_stderr = true; Включить ли перенаправление стандартного вывода ошибок программы (по умолчанию false) ; stdout_logfile = / a / path; Стандартный путь вывода; по умолчанию АВТО ; stdout_logfile_maxbytes = 1 МБ; Максимальный размер файла # Файл журнала вырезан (по умолчанию 50 МБ) ; stdout_logfile_backups = 10; # Количество резервных копий файла журнала (по умолчанию 10) ; stdout_capture_maxbytes = 1 МБ; Количество байтов в «режиме захвата» (по умолчанию 0) ; stdout_events_enabled = false; Выдавать события, когда стандартный вывод записывается в файл (по умолчанию false) ; stderr_logfile = / a / path; Стандартный вывод ошибок, NONE, если нет; по умолчанию AUTO ; stderr_logfile_maxbytes = 1 МБ; Максимальный размер файла # байт файла журнала ротация b4 (по умолчанию 50 МБ) ;stderr_logfile_backups=10 ; # of stderr logfile backups (default 10) ;stderr_capture_maxbytes=1MB ; number of bytes in ‘capturemode’ (default 0) ;stderr_events_enabled=false ; emit events on stderr writes (default false) ; environment = A = «1», B = «2»; Добавить переменные среды процесса (по умолчанию не добавляет) ; serverurl = AUTO; Заменить вычисление serverurl (childutils) ; Ниже приведены все возможные настройки части события, большинство из которых такие же, как указано выше. ; eventlistener subsection values, create one or more ‘real’ ; eventlistener: sections to be able to handle event notifications ; sent by supervisor. ;[eventlistener:theeventlistenername] ;command=/bin/eventlistener ; the program (relative uses PATH, can take args) ;process_name=%(program_name)s ; process_name expr (default %(program_name)s) ;numprocs=1 ; number of processes copies to start (def 1) ;events=EVENT ; event notif. types to subscribe to (req’d) ;buffer_size=10 ; event buffer queue size (default 10) ;directory=/tmp ; directory to cwd to before exec (def no cwd) ;umask=022 ; umask for process (default None) ;priority=-1 ; the relative start priority (default -1) ;autostart=true ; start at supervisord start (default: true) ;startsecs=1 ; # of secs prog must stay up to be running (def. 1) ;startretries=3 ; max # of serial start failures when starting (default 3) ;autorestart=unexpected ; autorestart if exited after running (def: unexpected) ;exitcodes=0,2 ; ‘expected’ exit codes used with autorestart (default 0,2) ;stopsignal=QUIT ; signal used to kill process (default TERM) ;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10) ;stopasgroup=false ; send stop signal to the UNIX process group (default false) ;killasgroup=false ; SIGKILL the UNIX process group (def false) ;user=chrism ; setuid to this UNIX account to run the program ;redirect_stderr=false ; redirect_stderr=true is not allowed for eventlisteners ;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO ;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;stdout_logfile_backups=10 ; # of stdout logfile backups (default 10) ;stdout_events_enabled=false ; emit events on stdout writes (default false) ;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO ;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB) ;stderr_logfile_backups=10 ; # of stderr logfile backups (default 10) ;stderr_events_enabled=false ; emit events on stderr writes (default false) ;environment=A=»1″,B=»2″ ; process environment additions ;serverurl=AUTO ; override serverurl computation (childutils) ; The below sample group section shows all possible group values, ; create one or more ‘real’ group: sections to create «heterogeneous» ; process groups. ;[group:thegroupname] ; programs = progname1, progname2; где progname1 и progname2 — это имена определенных программ мониторинга и управления, например [program: x], здесь x ;priority=999 ; the relative start priority (default 999) ; Следующая опция [include] может содержать только одну настройку файлов.Функция состоит в том, чтобы определить файл конфигурации программы управления супервизором, который можно удалить отдельно и для удобства отделить от основного файла конфигурации. ; 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 = relative / directory / *. ini; определяет путь к файлу конфигурации управляющей программы мониторинга
2. Приведем несколько конкретных примеров ниже.
Чтобы обеспечить простоту управления каждым процессом (сервисом), которым мы управляем, мы можем создать отдельный каталог для хранения процессов (сервисов), которыми мы должны управлять. В этом каталоге мы можем создавать файлы с расширением .conf, которыми мы хотим управлять. В нем содержатся команды и конфигурация процесса. Лучше создать файл с расширением .conf для каждого процесса, которым мы хотим управлять.
Создайте каталог, в котором нам нужно управлять различными процессами:
mkdir -p /etc/supervisor/conf.d
Затем нам нужно изменить последние две строки в supervisors.conf:
;[include] ; files = relative / directory / *. ini; определяет путь к файлу конфигурации программы мониторинга управления изменить на: [include] files = /etc/supervisor/conf.d/*.conf
3. Запустите несколько общих команд supervisord и supervisorctl:
supervisord -c /etc/supervisor/supervisord.conf
Некоторые общие команды supervisorctl:
Источник: russianblogs.com
Запуск процессов в supervisor
Supervisor — это система клиент/сервер, при помощи которой пользователь (администратор) может контролировать подключенные процессы в системах типа UNIX. Инструмент создает процессы в виде под-процессов от своего имени, поэтому имеет полный контроль над ними.
Собираем на дрон для штурмовиков Николаевской области. Он поможет найти и уничтожить врага
Supervisor состоит из серверной части под названием supervisord, которая создает и управляет всеми процессами, и системного/веб-интерфейса supervisorctl для управления и мониторинга supervisord.
Установка и настройка supervisor
Процесс установки supervisord в Debian предельно прост. Нужно выполнить команду:
apt-get install supervisor
Установка supervisor, необходимо иметь права root
ПОБУДОВА БІЗНЕС-ПРОЦЕСІВ
Навчіться впроваджувати бізнес-процеси відповідно до нових цілей компанії.
После установки, supervisor нужно сконфигурировать и добавить программы/процессы, которыми он будет управлять. Файл конфигурации по умолчанию находится в /etc/supervisor/supervisord.conf (для Ubuntu, Debian) или /etc/supervisord.conf для других систем(FreeBSD и т.д.).
Для добавления нового процесса (воркера) нужно дополнить файл аналогичным кодом:
[program:worker] command=/usr/bin/php /var/www/worker.php stdout_logfile=/var/log/worker.log autostart=true autorestart=true user=www-data stopsignal=KILL numprocs=1
Создание воркера для управления процессом PHP
Кратко пройдемся по параметрам
- [program:worker] — название процесса/воркера, к которому будут относиться все последующие параметры секции;
В случае, когда требуется запуск сразу нескольких инстансов одного и того же процесса, конфигурация будет иметь вид:
[program:worker] command=/usr/bin/php /var/www/worker.php process_name=%(program_name)s_%(process_num)02d numprocs=10 stdout_logfile=/var/log/worker.log autostart=true autorestart=true user=www-data stopsignal=KILL
Создание 10 копий процесса
В этом случае добавляется строчка process_name=%(program_name)s_%(process_num)02d, которая задает имена всех копий процесса, в нашем случае worker_00 , worker_01 и т.д.
После добавления новых процессов/воркеров не забывайте перезагружать supervisor:
Supervisor также включает пользовательский веб-интерфейс supervisorctl, который включается при помощи файла конфигурации. Для этого нужно изменить секцию [inet_http_server], вписав туда верные имя пользователя и пароль:
[inet_http_server] port=127.0.0.1:9001 ;username=some_user_name ;password=some_password
Включение веб-консоли supervisorctl на 9001-м сокете
Теперь всеми доступными процессами можно управлять через браузер. Помните, что после изменения конфига supervisor и/или supervisorctl нужно обновить.
Дополнительные возможности
В supervisor есть встроенный механизм мониторинга событий, при помощи которого система может оповещать об ошибках:
[eventlistener:memmon] command=memmon -a 200MB -m [email protected] events=TICK_60
Если процесс потребляет более 200 МБ памяти, memmon перезапускает его и отправляет уведомление на почту, проверка каждые 60 секунд
При помощи ивентов и собственного скрипта на Pyton можно произвести проверку буквально любого аспекта нужного процесса.
Самое главное
Supervisor — простой и достаточно мощный инструмент для контроля процессов. С правильной настройкой он способен обеспечить бесперебойную работу вашего веб-сервиса.
Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.
Главная > Highload > Запуск процессов в supervisor
Собираем на дрон для штурмовиков Николаевской области. Он поможет найти и уничтожить врага
Источник: highload.today