Главная >> Инструкции >> Настройка supervisor

Настройка 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

<?php echo "Started..."; while(true){ sleep(5); }

Теперь для этого процесса можно создать конфигурационный файл 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. Переменные надо записать через запятую. Например:

environment=DISPLAY=":1",HOME="/root"

После каждого изменения конфигурации не забывайте перезапускать 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, а все остальные процессы настроить в нём.

Pеклама
Посмотреть детали

Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали

2 комментария к “Настройка supervisor”

Оставьте комментарий