Ubuntu. Установка и настройка supervisor

02.07.2023

Теги: CLILinuxUbuntuКлиентНастройкаСерверУстановка

Supervisor — это клиент-сервер система, написанная на Python, которая позволяет запускать программы с определенными параметрами и отслеживать их состояние. Запуск процессов supervisor производит от своего имени, как подпроцессы, поэтому контроль остается за ним. Supervisor предоставляет системный и веб-интерфейс для мониторинга и управления процессами.

Установка

Установка supervisor

$ sudo apt install supervisor

Чтобы запустить и добавить в автозагрузку

$ sudo systemctl enable supervisor --now

Посмотреть состояние

$ sudo systemctl status 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

Управление

Для управления supervisord предназначена утилита supervisorctl.

$ supervisorctl help
default commands (type help <topic>):
=====================================
add    exit      open  reload  restart   start   tail
avail  fg        pid   remove  shutdown  status  update 
clear  maintail  quit  reread  signal    stop    version

Перезагрузить supervisord

$ sudo supervisorctl reload

Перезапустить отдельный процесс или сразу все процессы без повторного чтения файлов конфигурации

$ sudo supervisorctl restart process # один процесс
$ sudo supervisorctl restart all # сразу все процессы
$ supervisorctl help restart
restart <name>         Restart a process
restart <gname>:*      Restart all processes in a group
restart <name> <name>  Restart multiple processes or groups
restart all            Restart all processes

Note: restart does not reread config files. For that, see reread and update.

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

$ sudo supervisorctl update
$ supervisorctl help update
update                Reload config and add/remove as necessary, and will restart affected programs
update all            Reload config and add/remove as necessary, and will restart affected programs
update <gname> [...]  Update specific groups

Посмотреть состояние одного или сразу всех процессов

$ sudo supervisorctl status process # одного процесса
$ sudo supervisorctl status # сразу всех процессов
$ supervisorctl help status
status <name>         Get status for a single process
status <gname>:*      Get status for all processes in a group
status <name> <name>  Get status for multiple named processes
status                Get all process status info

Запустить или остановить один или сразу все процессы

$ sudo supervisorctl start process # запустить один процесс
$ sudo supervisorctl start all # запустить сразу все процессы
$ sudo supervisorctl stop process # остановить один процесс
$ sudo supervisorctl stop all # остановить сразу все процессы
$ supervisorctl help start
start <name>         Start a process
start <gname>:*      Start all processes in a group
start <name> <name>  Start multiple processes or groups
start all            Start all processes
$ supervisorctl help stop
stop <name>         Stop a process
stop <gname>:*      Stop all processes in a group
stop <name> <name>  Stop multiple processes or groups
stop all            Stop all processes

Пример

Давайте установим php-cli и напишем маленький скрипт, который будет просто висеть в фоне и время от времени «падать».

$ sudo apt install php-cli
$ cd /home/evgeniy
$ mkdir simple-script
$ nano app.php
<?php
fwrite(STDOUT, "Started script ${argv[0]}...\n");
while (true) {
    sleep(1);
    if (rand(1, 10) === 5) {
        fwrite(STDERR, "Script ${argv[0]}, error occurred\n");
        exit(1);
    }
}

Создадим конфигурационный файл

$ sudo nano /etc/supervisor/conf.d/simple-script.conf
[program:simple-script]
directory=/home/evgeniy/simple-script/
command=/usr/bin/php app.php
user=evgeniy
autostart=true
autorestart=true

Добавим новую программу под управление supervisor

$ sudo supervisorctl update

Теперь проверим, что там с нашей программой

$ sudo supervisorctl status
simple-script                    RUNNING   pid 2444, uptime 0:00:07
$ sudo supervisorctl status
simple-script                    RUNNING   pid 2444, uptime 0:00:09
$ sudo supervisorctl status
simple-script                    STARTING  
$ sudo supervisorctl status
simple-script                    RUNNING   pid 2470, uptime 0:00:03

Логирование

Давайте добавим логирование в файл конфигурации

$ sudo nano /etc/supervisor/conf.d/simple-script.conf
[program:simple-script]
directory=/home/evgeniy/simple-script/
command=/usr/bin/php app.php
user=evgeniy
autostart=true
autorestart=true
stdout_logfile=/home/evgeniy/simple-script/app.log
stderr_logfile=/home/evgeniy/simple-script/app.err.log
$ sudo supervisorctl update

Посмотрим, что там в файлах логов

$ cat /home/evgeniy/simple-script/app.log
Started script app.php...
Started script app.php...
Started script app.php...
Started script app.php...
Started script app.php...
$ cat /home/evgeniy/simple-script/app.err.log
Script app.php, error occurred
Script app.php, error occurred
Script app.php, error occurred
Script app.php, error occurred
Script app.php, error occurred

Несколько процессов

Можно запустить несколько экземпляров одной программы

$ sudo nano /etc/supervisor/conf.d/simple-script.conf
[program:simple-script]
directory=/home/evgeniy/simple-script/
command=/usr/bin/php app.php
user=evgeniy
autostart=true
autorestart=true
numprocs=5
process_name=%(program_name)s_%(process_num)02d
stdout_logfile=/home/evgeniy/simple-script/app.log
stderr_logfile=/home/evgeniy/simple-script/app.err.log
$ sudo supervisorctl update
$ sudo supervisorctl status
simple-script:simple-script_00   RUNNING   pid 2731, uptime 0:00:01
simple-script:simple-script_01   RUNNING   pid 2724, uptime 0:00:09
simple-script:simple-script_02   RUNNING   pid 2726, uptime 0:00:07
simple-script:simple-script_03   STARTING
simple-script:simple-script_04   RUNNING   pid 2725, uptime 0:00:07

Поиск: CLI • Linux • Ubuntu • Клиент • Настройка • Сервер • Установка • supervisor

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.