Если вы хотите разместить процессы в фоновом режиме терминала, первое, что вам приходит в голову, это добавить символ & после команды, чтобы добиться цели скрытия программы в фоновом режиме, хотя кажется, что процесс уже работает в фоновом режиме, на самом деле, процесс все равно будет убит, когда сеанс терминала закрыт.Такого рода проблемы обычно решаются с помощью команды nohup.Функция nohup состоит в том, чтобы игнорировать сигнал SIGHUP, и сигнал отправляется ко всем запущенным программам в сеансе, когда сеанс закрыт.Короче говоря, команда nohup с & может использоваться не только в фоновом режиме, еще не затронутом закрытием сеанса.
$ nohup /bin/cat &
Затем возникает проблема.Хотя он работает в фоновом режиме и избегает влияния операции зависания, он не может избежать проблем с самим резидентным процессом.Как только он аварийно завершит процесс сам по себе, он будет бессилен перед золотым партнером. . Так как же нам подтянуть зависший резидентный процесс? Вот об этом мы и поговорим, супервайзер.
Знакомство с Супервайзером
Supervisor специально используется вUnix-подобныйИнструмент для мониторинга и управления процессом в системе был выпущен в 2004 году.Хотя название великолепное, его амбиции не в том, чтобы координировать процесс всей операционной системы, а в том, чтобы быть послушным личным помощником.Ему нужно только сказать управлять программой, она контролирует процесс в соответствии с вашими требованиями, сохраняет умирание и обеспечивает непрерывную работу процесса.
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Вы можете увидеть интерфейс супервизора.
Меня зовут Пинг Йе, это проект с открытым исходным кодом, ориентированный на развитие технологии Gopher."иди домой"
Спасибо за просмотр.Если вы считаете, что статья была вам полезна, обратите внимание на паблик-аккаунт "Pingye", посвященный языку Go и техническим принципам.