Менеджер процессов Supervisor
Supervisor это удобный инструмент позволяющий пользователям контролировать процессы. К примеру если нужно запустить некий скрипт на постоянное исполнение, и при этом нужно иметь более удобный интерфейс для управления, чем это может дать screen.
Конечно всегда можно написать init скрипт, добавить сервис в systemd, но это требует хорошего знания и опыта настройки системы инициализации процессов.
Supervisor предоставляет удобный интерфейс для этого.
Установка supervisor¶
Установка из пакета¶
Далее можно убедиться что установка прошла успешно и сервис supervisor работает:
Установка из pip3¶
В официальной документации этот тип установки рассматривается как приоритетный, поэтому рассмотрю и его. Этот способ сложнее и требует понимания того как работает systemd. Предполагается что у нас в системе уже установлен python3
и python3-pip
.
Установка pip пакета¶
если выполнить эту комманду от пользователя, то supervisor установится в окружение пользователя. Не наш вариант. Поэтому делаем от *root'*а
Создадим конфигурацию сервиса для systemd¶
/etc/systemd/system/supervisor.service
[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
Создадим конфигурационный файл¶
Содержание конфига примерно такое:/etc/supervisor/supervisord.conf
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
Включим сервис¶
Добавление процесса в supervisor¶
К примеру у нас есть такой скрипт:
/usr/local/bin/myscript
#!/usr/bin/env bash
while true
do
# Echo current date to stdout
echo `date`
# Echo 'error!' to stderr
echo 'error!' >&2
sleep 5
done
Каждые 5 секунд он выводит на стандартный вывод текущую дату, а на вывод ошибок (stderr) некоторое сообщение. Создадим для него конфигурацию:
/etc/supervisor/conf.d/myscript.conf
[program:myscript]
command=/usr/local/bin/myscript
autostart=true
autorestart=true
stopasgroup=true
stderr_logfile=/var/log/supervisor/myscript-err.log
stdout_logfile=/var/log/supervisor/myscript-out.log
Скомандуем supervisor перечитать конфиг и добавить наш сервис:
Это все.Управление процессами¶
Старт и остановка:
Добавить и удалить процесс:
Просмотр состояния: Просмотр логов: Так же логи можно смотреть и стандартными средствами системы.Supervisor - утилита для запуска сервера¶
Предпологаем, что Supervisor установлен в ОС. Далее сделаем отдельную папку для логов
И собственно сам процесс настройки.Создаем файл /etc/supervisor/conf.d/hlds.conf
и вставляем туда следующее содержимое
[program:Название]
user=steam
environment = HOME="/steam",LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH"
process_name=hlds
directory=/srv/hlds/
command=/srv/hlds/hlds_linux -game cstrike -norestart +servercfgfile server.cfg +sv_lan 0 +ip 127.0.0.1 +port 27015 +maxplayers 32 +map de_dust2
numprocs=1
startretries=3
autostart=true
autorestart=true
stdout_logfile=/var/log/hlds/hlds.log
stdout_logfile_maxbytes=5MB
stdout_logfile_backups=10
redirect_stderr=true
stderr_logfile=/var/log/hlds/error.log
stderr_logfile_maxbytes=5MB
stderr_logfile_backups=10
Описание настройки¶
- [program:hlds] - Название программы. Служит для управления.
- user - Пользователь от которого запускать сервер
- environment -
/steam
путь к home директории пользователя от которого запускаем процесс. Все остальное оставляем как есть - process_name - имя процесса
- directory - путь к директории сервера
- command - команда запуска. Обратите внимания на hlds_linux вместо hlds_run
- numprocs - количество процессов. В нашем случае 1
- startretries - количество попыток автоподнятия при падении. При превышении сервер больше не поднимется
- autostart - автозапуск при запуске ОС
- autorestart - автоперезапуск при падении
- stdout_logfile - путь к логфайлу
- stdout_logfile_maxbytes - максимальный размер лог файла
- stdout_logfile_backups - максимальное количество лог файлов
- redirect_stderr - переадресация потока ошибок
- stderr_logfile - путь к логу ошибок
- stderr_logfile_maxbytes - максимальный размер файла ошибок
- stderr_logfile_backups - максимальное количество файлов ошибок
После этого рестартим сервис
Для контроля есть утилита supervisorctl, которая идет вместе с самим supervisor
Запуск
Остановка ПерезапускБольше информации о настройках здесь