Supervisor
С помощью supervisor можно автоматически запускать и контролировать состояние приложений. Для контроля приложений под управлением supervisor можно использовать удаленный консольный клиент supervisorctl или через web интерфейс.
Официальный сайт проекта: http://supervisord.org
Установка
sudo aptitude update
sudo aptitude install supervisor
Общая настройка демона supervisor
Откроем для редактирования основной конфиг supervisor
mcedit /etc/supervisor/supervisord.conf
и приведем к виду:
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0400
chown=root:root ; только root сможет использовать supervisorctl
#username=user
#password={SHA}5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
[inet_http_server]
port = 192.168.10.1:9988
username = user
password = {SHA}5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes = 10MB
logfile_backups=10
loglevel = info
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
Подробнее см. на http://supervisord.org/configuration.html
Получаем хэш SHA-1 пароля для доступа через supervisorctl и http.
echo -n your_password | sha1sum | awk '{print $1}'
Сценарии управления процессами
В каталоге /etc/supervisor/supervisor.d/ по умолчанию находятся файлы со сценариями запуска и управления приложениями через supervisor.
Пример конфигурационного файла supervisor для запуска двух процессов shadowsocks:
[program:ssserver]
command=sslocal --user shadowsocks -qq -c /etc/shadowsocks/shadowsocks_%(process_num)s.conf
process_name=%(program_name)s_%(process_num)d
numprocs=2
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
redirect_stderr=true
user=root
stdout_logfile=/var/log/shadowsocks/%(program_name)s_%(process_num)d.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
#stderr_logfile=/var/log/shadowsocks/stderr_%(program_name)s_%(process_num)d.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5
Использование
После первоначальных настроек перезапустим демон supervisord
sudo invoke-rc.d supervisor restart
Далее для работы с supervisor лучше использовать supervisorctl.
После добавления/редактирования конфигурации нового сервиса необходимо «перечитать» конфиги.
Показать список приложений, конфиги которых были изменены.
sudo supervisorctl reread
Перечитать конфиги и перезапустить сервисы, конфиги которых были изменены.
sudo supervisorctl update
Показать текущий статус всех процессов под управлением supervisor
sudo supervisorctl status
или только статус конкретного процесса
sudo supervisorctl status sslocal:sslocal_0
Перезапустить процесс
sudo supervisorctl restart sslocal:sslocal_0
Описание возможных статусов
- STOPPED — процесс остановлен в обычно порядке, т.е. не аварийно;
- STARTING — процесс запускается;
- RUNNING — процесс запущен/работает;
- BACKOFF — процесс запускался, но так и не запустился (такие процессы supervisor перезапускает. Если не получилось через некоторое время запустить процесс, то статус программы устанавливается в FATAL. Почитайте об опции startretries;
- STOPPING — процесс останавливается;
- EXITED — процесс завершился (будет автоматически запущен, если установлено autorestart=true);
- FATAL — процесс не смог запуститься (скорее всего есть ошибки в конфигурационном файле программы);
- UNKNOWN — неизвестное состояние процесса («supervisord programming error»).
Возможные переходы состояний процесса:
Краткий список команд управления supervisorctl
avail |
Вывести все доступные программы |
add <name> |
Активация значений в секции программы или группы |
remove <name> |
Деактивация программы или группы |
update |
Перечитать файл конфигураций и выполнить add/remove, если необходимо. Например, если мы добавили в конфигурационный файл новую секцию с программой, то после update для неё будет вызван add, а если мы удалим секцию, то remove |
status [<name>] |
Вывести текущее состояние всех процессов либо конкретного процесса, передав его имя |
pid [<name>] [all] |
Вывести pid демона supervisord. Если ввести <name>, то выведется pid указаной программы. Если ввести pid all, то выведется список pid‘ов для каждого процесса по одному на каждую строчку |
start [<name>] [<gname:*>] [all] |
Введите <name>, чтобы запустить процесс или группу по имени. Введите all, чтобы запустить все процессы |
stop [<name>] [<gname:*>] [all] |
Введите <name>, чтобы остановить процесс. Введите <gname:*>, чтобы остановить все процессы в группе. Введите all, чтобы остановить все процессы |
restart [<name>] [<gname:*>] [all] |
Введите <name>, чтобы перезагрузить процесс или группу по имени. Введите all, чтобы перезагрузить все процессы |
fg <name> |
Подключиться к процессу. После нажатия на Ctrl+c вы вернетесь в supervisorctl |
open <url> |
Присоединиться к удаленному supervisord (формат записи для UNIX-сокета: unix:///socket/path) |
shutdown |
Остановить supervisord |
reload |
Перезагрузить supervisord |
reread |
Перечитать файл конфигураций (чтобы не перезагружать сам supervisord) |
tail [-f] [-<num>] <name> [stdout|stderr] |
Вывести логи указанного процесса, для выхода из режима нажать Ctrl+c. Если укажете флаг -f, то tail будет следить за логом и выводить вновь появившиеся данные (в общем, работает по аналогии с консольным вызовом tail -f). Если, например, введете tail -100 , то выведется 100 байт log-файла указанного процесса. По умолчанию выводится stdout |
maintail [-f][-<num>] |
Вывести данные из главного log-файла supervisor’a, для выхода нажать Ctrl+c. Если укажите флаг -f, то maintail будет следить за логом и выводить вновь появившиеся данные (в общем, работает по аналогии с консольным вызовом tail -f). Если, например, введете -100, то выведется 100 байт log-файла |
clear [<name>] [all] |
Очистить log-файлы для опеределенных программ (либо для всех программ, если указать all) |
version |
Вывести версию supervisord |
exit, quit |
Выйти из supervisorctl |
Настройка init, supervisor
Настроим автоматическую загрузку демона supervisord на втором уровне init (Debian и Ubuntu по умолчанию запускаются на втором уровне инициализии).
sudo update-rc.d -f supervisor remove
sudo sysv-rc-conf --level 2 supervisor on
sudo sysv-rc-conf --list supervisor
|