Ubuntu. Установка и настройка supervisor
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
— перенаправить вывод ошибок процесса в вывод supervisorredirect_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
- Установка WireGuard на Ubuntu 20.04 LTS. Часть вторая из двух
- Установка WireGuard на Ubuntu 20.04 LTS. Часть первая из двух
- Удаленный рабочий стол в Ubuntu Desktop 18.04 LTS
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 12 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 11 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 10 из 12
- Установка OpenVPN на Ubuntu 18.04 LTS. Часть 9 из 12
Поиск: CLI • Linux • Ubuntu • Клиент • Настройка • Сервер • Установка • supervisor