Вопрос: Супервизор не загружает новые файлы конфигурации


У меня проблема с развертыванием приложения Django с использованием Gunicorn и Supervisor. Хотя я могу заставить Gunicorn обслуживать мое приложение (установив правильный PYTHONPATH и выполнив подходящую команду, то из конфигурации супервизора) я не могу заставить супервизора запустить его. Он просто не увидит мое приложение. Я не знаю, как убедиться, что файл конфигурации в порядке.

Вот что говорит supervisorctl:

# supervisorctl start myapp_live
myapp_live: ERROR (no such process)

Я запускаю его на Ubuntu 10.04 со следующей конфигурацией:

Файл /home/myapp/live/deploy/supervisord_live.ini:

[program:myapp_live]
command=/usr/local/bin/gunicorn_django --log-file /home/myapp/logs/gunicorn_live.log --log-level info --workers 2 -t 120 -b 127.0.0.1:10000 -p deploy/gunicorn_live.pid webapp/settings_live.py
directory=/home/myapp/live
environment=PYTHONPATH='/home/myapp/live/eco/lib'
user=myapp
autostart=true
autorestart=true

В файле /etc/supervisor/supervisord.conf в конце файла есть:

[include]
files = /etc/supervisor/conf.d/*.conf

и вот символическая ссылка на мой файл конфигурации:

# ls -la /etc/supervisor/conf.d
lrwxrwxrwx 1 root root   48 Dec  4 18:02 myapp-live.conf -> /home/myapp/live/deploy/supervisord_live.ini

все выглядит хорошо для меня, но супервизор просто продолжает говорить myapp_live: ERROR (no such process), Любое решение для этого?


60
2017-12-11 08:48


Источник


Я почесал голову той же проблемой; мои файлы конфигурации не загружались, когда я запускал reread или update, Оказалось, что я сохранил файлы конфигурации как foo.conf.py вместо foo.conf поэтому они не были идентифицированы. - Timmy O'Mahony


Ответы:


У меня была такая же проблема,

sudo service supervisord reload

сделал трюк, хотя я не знаю, является ли это ответом на ваш вопрос.


27
2017-12-20 14:34



Некоторое время назад я остановился, а потом начал работать над ним. Не знаю, будет ли перезагрузка работать (поскольку я не перезапускаю сердце), но я думаю, это могло бы - grucha
Я тоже это сделал, и это сработало. интересно, почему /etc/init.d/supervisor restart не работает, когда ручная остановка и начало работы. - Kirill
Работал для меня, хотя служба не работала, поэтому я просто побежал ps aux | grep supervisor а потом sudo kill -HUP pid - Wayne Werner
Это опасно, так как он перезапустит весь демон супервизора. - Mark Theunissen
supervisorctl reread может исправить это, не перезапустив службу. - Jonathan Liuti


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

supervisorctl reread
supervisorctl update

180
2018-02-17 20:03



Это должен быть правильный ответ. «супервизора перечитать» в одиночку недостаточно. - Miebster
+1 Это лучший ответ, потому что он не зависит от менеджеров процессов. - tidwall
«supervisorctl reeread» недостаточно, но не «супервизорного обновления» достаточно? Согласно документации «обновление» происходит перечитывание, за которым следует перезапуск любых программ, конфигурация которых была изменена перечитанием. - BlueBomber


Перезагрузка процесса главного супервизора может работать, но у него будут непреднамеренные побочные эффекты, если у вас есть более одного процесса, контролируемого супервизором.

Правильный способ сделать это - выдать supervisorctl reread который заставляет его сканировать файлы конфигурации для любых изменений:

root@debian:~# supervisorctl reread
gunicorn: changed

Затем просто перезагрузите это приложение:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started

14
2018-04-29 07:39



Это лучшее решение, если вы хотите только прочитать измененный / новый файл конфигурации и оставить остальную часть запущенных процессов нетронутой. Supervisorctl покажет, что новое приложение avail, Добавьте его в (повторно) запускаемые процессы, выпуская supervisorctl update, См. Также ответ Марка serverfault.com/a/479754/125887 - Sjaak Trekhaak
Этого было недостаточно для меня. supervisorctl update был необходим. - Yaroslav Nikitenko


Удостоверьтесь, что ваши файлы confisor conf заканчиваются на .conf

Понадобился время, чтобы понять, что это. Надеюсь, это поможет следующему человеку.


13
2017-10-10 23:55



Потратил час на тот же вопрос - не могу поверить, что все было так просто. - Zane Hooper
Спасибо за то, что вы указали этот ответ. Для жизни я не мог понять этого. - Phillip Martin


Я столкнулся с этой проблемой, используя пакет супервизора версии 3.0a8-1.1 с Ubuntu Server 12.10. Я решил решить эту проблему, прочитав встроенную справку:

$ sudo 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

В частности, вы хотите использовать синтаксис:

sudo supervisorctl restart myapp_live:*

Как указано в документации http://supervisord.org/configuration.html#programx-section - «Раздел [program: x] фактически представляет собой« однородную группу процессов »для руководителя (начиная с 3.0)». Поэтому, возможно, проблема впервые появилась в версии 3.0.

PS: Я новичок в супервизоре; я использую https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b/production/chat.supervisor в качестве примера того, как должна выглядеть минимальная конфигурация.


5
2017-10-10 01:23





У меня была аналогичная проблема ( myapp_live: ERROR (no such process) ), и это было потому, что мое определение процесса было

[program: myapp_live]

когда это должно было быть

[program:myapp_live]

Хотя это не затрагивает вопрос, который был задан, меня привел сюда поиск, который ищет решение моей проблемы, поэтому, надеюсь, другие люди тоже найдут его здесь.


4
2018-06-02 01:46



Тоже самое! Я оставил это как [program] только, следуя документам, но делая это [program:redis] заставил его работать на меня. Вещи наверняка кажутся странными! - dotslash


Я нашел это решение наиболее удобным:

EDIT: перед этим проверьте свой путь supervisorctl, используя which supervisorctl чтобы убедиться, что вы добавляете правильный путь к sudoers.

Добавьте эту строку в файл sudoers, используя visudo (где: myappuser - пользователю, которому необходимо перезагрузить приложение, myapp - Имя приложения):

myappuser  ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart myapp

А потом просто:

sudo supervisorctl restart myapp

Вы не привязаны к сценариям запуска дистрибутива, и вы предоставляете довольно узкие привилегии для пользователя, перезапускающего ваше приложение для пушек. Кроме того, вам не нужно заботиться о pid. Команда не будет запрашивать пароль, поэтому он подходит для сценариев bash / fabric для автоматического развертывания. С другой стороны, вы должны знать, что если supervisorctl уязвим к некоторой ошибке, вызывающей выполнение кода, злоумышленник может использовать эту привилегию sudo для запуска кода как root (но насколько я знаю, такая ошибка не была обнаружена для супервизора и это большая вещь, чтобы найти такую ​​уязвимость).


2
2017-07-31 09:00





Чтение кода supervisorctl.py здесь: https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py

Вы можете видеть, что обновление supervisorctl (функция do_update) вызывает reloadConfig () точно так же, как и superisorctl reeread (function do_reread).

Поэтому я думаю, что вызов перечитывать не требуется, если вы вызываете обновление после него.

Из результатов GIT-вины это было так, как минимум с июля 2009 года.


2
2018-03-04 01:55





Я обнаружил, что скрипты init.d ненадежны в различных версиях Ubuntu / Debian. Способ сделать это:

sudo supervisorctl reload

1
2018-04-24 23:13



Это неправильный способ сделать это, хотя он будет работать во многих случаях. Ответ @ burhan-khalid является правильным и дает объяснение. - glarrain