Supervisor python как пользоваться windows

Обновлено: 03.07.2024

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 и т.д.).

Для добавления нового процесса (воркера) нужно дополнить файл аналогичным кодом:

Создание воркера для управления процессом PHP

Кратко пройдемся по параметрам

  • [program:worker] — название процесса/воркера, к которому будут относиться все последующие параметры секции;
  • command=/usr/bin/php /var/www/worker.php — команда на запуск файла, то есть путь к нужному файлу;
  • stdout_logfile=/var/log/worker.log — вывод консоли в файл;
  • autostart=true — запуск воркера вместе с запуском supervisor;
  • autorestart=true — перезапуск воркера, если тот по какой-то причине упал;
  • user=www-data — запуск процесса под определенным пользователем;
  • stopsignal=KILL — сигнал остановки (убийства) процесса. Если не определяется, то используется команда по умолчанию — TERM</var>;
  • numprocs=1 — количество инстансов заданного воркера.

В случае, когда требуется запуск сразу нескольких инстансов одного и того же процесса, конфигурация будет иметь вид:

Создание 10 копий процесса

В этом случае добавляется строчка process_name=%(program_name)s_%(process_num)02d, которая задает имена всех копий процесса, в нашем случае worker_00 , worker_01 и т.д.

После добавления новых процессов/воркеров не забывайте перезагружать supervisor:

Включение веб-консоли supervisorctl на 9001-м сокете

Теперь всеми доступными процессами можно управлять через браузер. Помните, что после изменения конфига supervisor и/или supervisorctl нужно обновить.

Дополнительные возможности

В supervisor есть встроенный механизм мониторинга событий, при помощи которого система может оповещать об ошибках:

Если процесс потребляет более 200 МБ памяти, memmon перезапускает его и отправляет уведомление на почту, проверка каждые 60 секунд

При помощи ивентов и собственного скрипта на Pyton можно произвести проверку буквально любого аспекта нужного процесса.

Самое главное

Supervisor — простой и достаточно мощный инструмент для контроля процессов. С правильной настройкой он способен обеспечить бесперебойную работу вашего веб-сервиса.

Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.

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

Supervisor или как запускать скрипты в фоне

Часто бывает потребность в запуске определенных скриптов в фоновом режиме. Многие просто ставят "&" и радуются, но скрипты имеют свойство падать в самый неподходящий момент и хотелось бы сразу их заново запускать и читать логи. На помощь приходит supervisor.

Supervisor - менеджер долгосрочных процессов, который выступает в качестве прослойки для мониторинга и управления Вашими процессами.

Установка

После установки supervisor должен запуститься сам, но для пущей надежности лучше его рестартануть:

Настройка

Запуск каждого процесса(скрипта) осуществляется при помощи создания конфигурационного файла с расширением .conf в папке

Переходим в папку:

Создаем файл запуска процесса "test":

А теперь все разберем:

[program:test] - задает названия процесса в supervisor, в данном случае "test"

command=/home/test.py - полный путь к запускаемому скрипту
autostart=true - запускать ли процесс при старте системы, доступные варианты: true, false
autorestart=true - запускать ли процесс при его остановке, доступные варианты: true, false, unexpected (запускать в том случае, если процесс был завершен неправильно)
stderr_logfile=/var/log/test.err.log - файл с выводом лога ошибки
stdout_logfile=/var/log/test.out.log - файл с выводом лога процесса при работе

Данные параметры минимальные для запуска скрипта, полный список параметров находится здесь.

Настройка закончена, нужно, что б supervisor считал обновленные настройки:

После того, как настройки считаны - нужно дать комманду запуска все сконфигурированых процессов, для этого вводим:

Всё, все процессы запущены и работают проверить статус Ваших процессов можете с помощью cli:

Как только выполняете эту команду - видите текущие процессы и их статусы. Можете ввести help, что б получить помощь по командам.

Александр Менщиков

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

Одним из главных иструментов является supervisor.

Для установки достаточно набрать следующую команду в терминале (считаем что менеджер пакетов pip у вас уже уставнолен. Как это сделать читайте в статье Создаем бота для telegram).

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

Удалим все содержимое и впишем следующий текст:

[program:github_server] command=python server.py directory=/var/www/codex.bot/ autorestart=true redirect_stderr=true stdout_logfile=/var/www/codex.bot/logs/app_sd.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=50 stdout_capture_maxbytes=1MB stdout_events_enabled=false loglevel=warn

В примере мы указываем, что хотим обеспечить контроль скрипта server.py, находящегося в директории /var/www/codex.bot и уточняем еще пару настроек логирования ошибок. Если супервизор у вас еще не запущен, выполните команду:

Теперь можно попросить супервизор прочитать данные из конфига:

Для просмотра статуса запущенных процессов воспользуйтесь командой:

Процесс под названием “github_server” (название указывается в конфиге) будет находится в состоянии “STOPPED”.


Теперь в статусе будет отображено состояние “RUNNING”. Для остановки процесса можно пользоваться командой:

Наконец, если принудительно завершить процесс:

Он все равно будет перезапущен супервизором:

Состояние до завершения: github_server RUNNING pid 21755, uptime 0:03:57 Состояние после завершения: github_server RUNNING pid 21929, uptime 0:00:01

Видно, что сервер был перезапущен. Более подробно можно почитать в официальной документации.

Если вам понравилась статья, поделитесь ссылкой на нее

Читайте далее

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

В первой части этой серии из двух частей мы увидели, как настроить и контролировать Supervisor для работы с нашими веб-приложениями. В этой части мы увидим, как мы можем программно управлять процессами Supervisor удаленно через API XML-RPC.

Начинаем

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

Supervisor
Supervisor
Supervisor

В мозгу сразу начинает звенеть вопрос. Что делать, если можно было бы контролировать процессы Supervisor программно? Это откроет много возможностей, когда процессы могут быть запущены или остановлены условно, вместо того чтобы запускать их неограниченно или управлять ими вручную, нажимая кнопки или запуская команды терминала. Это очень возможно с использованием API XML-RPC, предоставляемого Supervisor.

API XML-RPC

Чтобы проверить текущее состояние сервера Supervisor, запустите:

Демон сервера можно перезапустить и остановить:

Аналогичным образом можно получить список всех доступных методов:

Ссылка API, содержащаяся в документации Supervisor, довольно проста и понятна. В этом уроке я расскажу о том, как управлять процессами на основе условия, а также о том, как мы можем расширить этот API для реализации наших собственных методов.

Управление процессами с использованием API

Допустим, мы хотим начать новый процесс отправки электронной почты каждый раз, когда какое-либо действие будет выполнено каким-то пользователем. (Существует много способов сделать это, и, возможно, это не самый лучший, но я просто использую его в качестве примера, чтобы продемонстрировать работу). Скажем, имя этого процесса определено в supervisord.conf - send_mail .

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

Этот API аналогичным образом можно применять к бесчисленным подобным экземплярам.

Расширение API XML-RPC

Мы можем как использовать стандартные методы API, предоставляемые Supervisor, так и написать наши собственные методы, расширяя API с помощью интерфейсов интерфейса XML-RPC. Это можно сделать, добавив новый раздел [rpcinterface:x] в файле supervisord.conf .

Теперь я создам небольшой интерфейс для него в файле с именем my_interface.py .

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

Заключение

В этой серии мы узнали, как использовать Supervisor для мониторинга и управления нашими приложениями. Мы также увидели, как мы можем использовать для веб-интерфейс и XML-RPC. Наконец, интерфейс XML-RPC расширяем, и вы можете использовать все возможности Supervisor для ваших собственных целей.

Читайте также: