Инструмент управления процессами Supervisor

Linux
Инструмент управления процессами Supervisor

Если вы хотите разместить процессы в фоновом режиме терминала, первое, что вам приходит в голову, это добавить символ & после команды, чтобы добиться цели скрытия программы в фоновом режиме, хотя кажется, что процесс уже работает в фоновом режиме, на самом деле, процесс все равно будет убит, когда сеанс терминала закрыт.Такого рода проблемы обычно решаются с помощью команды nohup.Функция nohup состоит в том, чтобы игнорировать сигнал SIGHUP, и сигнал отправляется ко всем запущенным программам в сеансе, когда сеанс закрыт.Короче говоря, команда nohup с & может использоваться не только в фоновом режиме, еще не затронутом закрытием сеанса.

$ nohup /bin/cat &

file

Затем возникает проблема.Хотя он работает в фоновом режиме и избегает влияния операции зависания, он не может избежать проблем с самим резидентным процессом.Как только он аварийно завершит процесс сам по себе, он будет бессилен перед золотым партнером. . Так как же нам подтянуть зависший резидентный процесс? Вот об этом мы и поговорим, супервайзер.

Знакомство с Супервайзером

Supervisor специально используется вUnix-подобныйИнструмент для мониторинга и управления процессом в системе был выпущен в 2004 году.Хотя название великолепное, его амбиции не в том, чтобы координировать процесс всей операционной системы, а в том, чтобы быть послушным личным помощником.Ему нужно только сказать управлять программой, она контролирует процесс в соответствии с вашими требованиями, сохраняет умирание и обеспечивает непрерывную работу процесса.

file

Unix-подобная система — это операционная система, разработанная на основе стиля Unix.За исключением Windows, большинство систем на рынке являются Unix-подобными системами.

В официальном документе указано, что Supervisor — это система архитектуры C/S, а ее соответствующие роли — Supervisorctl и Supervisord. Основная функция последнего - запустить настроенную программу, ответить на инструкции, отправленные Supervisorctl, и перезапустить завершенный подпроцесс, а первый - клиент Supervisor, Он предоставляет ряд параметров в виде командных строк. чтобы облегчить пользователям выполнение команд Supervisor Sending, часто используемых команд, таких как запуск, пауза, удаление и обновление.

Установка и настройка супервизора

Установка Supervisor очень проста и может быть установлена ​​непосредственно в менеджерах пакетов основных операционных систем.

$ yum install -y supervisor

Установленный файл конфигурации супервизора по умолчанию /etc/supervisor.conf.Если файл конфигурации не может быть найден, вы можетеСгенерировано официальной командой, конфигурационный файл содержит пустой конфигурационный каталог /etc/supervisor.d (в разных ОС может быть по-разному), он может быть динамически расширен простым добавлением конфигурационного файла в этот каталог, так что supervisor.conf вообще менять не нужно.

Возьмем в качестве примера простейшую команду cat.Команда cat без параметров заблокирует ожидание стандартного ввода, поэтому она очень подходит для демонстрации резидентных процессов. Теперь создайте файл конфигурации cat.ini в /etc/supervisor.d/, первая строка определяет имя программы, которая используется для идентификации операции, а вторая строка определяет путь к команде, которая является основной выполняемой командой. по программе.

[program:foo]
command=/bin/cat

После настройки запустите сервис supervisord, обратите внимание на указание конфигурационного файла супервизора через -c.

$ supervisord -c /etc/supervisord.conf

Конечно, вы также можете не указывать путь конфигурации, тогда он будет искать файлы конфигурации один за другим в следующем порядке:

  • $CWD/supervisord.conf
  • $CWD/etc/supervisord.conf
  • /etc/supervisord.conf
  • /etc/supervisor/supervisord.conf
  • ../etc/supervisord.conf
  • ../supervisord.conf

Если вы установили Supervisor через Mac OS, вы можете не найти файл конфигурации в указанном выше каталоге, вы можете использовать официальную команду для создания конфигурации.

$ echo_supervisord_conf > supervisor.conf

На этом этапе процесс cat уже должен быть запущен.

$ ps aux | grep /bin/cat

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

$ sudo kill 9 <进程ID>

Объяснение основной конфигурации

Опции в конфигурационном файле — это не только команды, многие элементы конфигурации официально предоставлены.

[program:name]
command=sh /tmp/echo_time.sh
priority=999
numprocs=1
autostart=true
autorestart=true
startsecs=10
startretries=3 
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=root
log_stdout=true
log_stderr=true
logfile=/tmp/echo_time.log
logfile_maxbytes=1MB
logfile_backups=10 
stdout_logfile_maxbytes=20MB 
stdout_logfile_backups=20 
stdout_logfile=/tmp/echo_time.stdout.log

Ниже приведено краткое описание нескольких выбранных конфигураций.

  • команда: команда для выполнения
  • приоритет: приоритет выполнения, чем выше значение, тем позже запуск и раньше завершение работы.
  • numprocs: количество процессов
  • автозапуск: следует ли начинать с supervisord
  • авторестарт: автоматический перезапуск
  • startsecs: время отсрочки старта, по умолчанию 10 секунд
  • startretries: количество попыток запуска, по умолчанию 3
  • коды выхода: перезапустить, когда код выхода программы равен 0 или 2
  • стоп-сигнал: стоп-сигнал
  • stopwaitsecs: Время задержки остановки, как долго останавливаться после получения команды остановки
  • user: какой пользователь выполнять как

Подпрограмма динамической операции

Чтобы добавить новую программу, просто добавьте файл конфигурации, а затем выполните supervisorctl update для динамического добавления новой программы без перезапуска службы supervisord. Если появляется сообщение об отказе в подключении, возможно, файл конфигурации не найден, и необходимо добавить параметры конфигурации.

$ supervisorctl update
foo1: added process group

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

foo1: stopped
foo1: removed process group

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

$ supervisorctl stop foo
foo: stopped

Конечно, вы также можете остановить все процессы более жестко с помощью команды stop all.

$ supervisorctl stop all
foo: stopped
foo1: stopped

И наоборот, чтобы запустить процесс, просто поменяйте стоп на старт.

$ supervisorctl start all

подключиться к процессу

$ supervisorctl fg <program 名称>

перезапустить супервизора

$ supervisorctl reload

Динамически загружать supervisor.conf

$ supervisorctl reread

Просмотр всего состояния процесса

$ supervisorctl status

Работа с веб-интерфейсом

Предоставляется официальный метод работы интерфейса, а комментарий inet_http_server необходимо удалить в supervisor.conf.

[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1:9001        ; ip_address:port specifier, *:port for all iface
username=user              ; default is no username (open server)
password=123               ; default is no password (open server)

Перезапустите супервизор.

$ supervisorctl reload

доступhttp://localhost:9001Вы можете увидеть интерфейс супервизора.

file


Меня зовут Пинг Йе, это проект с открытым исходным кодом, ориентированный на развитие технологии Gopher."иди домой"


Спасибо за просмотр.Если вы считаете, что статья была вам полезна, обратите внимание на паблик-аккаунт "Pingye", посвященный языку Go и техническим принципам.

关注我