У меня проблема с развертыванием приложения Django с использованием Gunicorn и Supervisor. Хотя я могу сделать так, чтобы Gunicorn обслуживал мое приложение (установив правильный PYTHONPATH и выполнив соответствующую команду, например, из конфигурации supervisord), я не могу заставить supervisor запускать его. Он просто не увидит мое приложение. Я не знаю, как убедиться, что файл конфигурации в порядке.
Вот что говорит 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
все выглядит хорошо для меня, но supervisorctl просто продолжаю говорить myapp_live: ERROR (no such process)
. Любое решение для этого?
источник
reread
илиupdate
. Оказалось , что я скопил свои конфигурационные файлы , какfoo.conf.py
вместо того ,foo.conf
чтобы они не были идентифицированы.Ответы:
У меня была такая же проблема,
сделал свое дело, хотя я не знаю, если это ответ на ваш вопрос.
источник
/etc/init.d/supervisor restart
не работает, когда ручную остановку и начало делай.ps aux | grep supervisor
а затемsudo kill -HUP pid
Правильный ответ заключается в том, что супервизор требует, чтобы вы перечитывали и обновляли при размещении нового файла конфигурации. Перезапуск не является ответом, так как это повлияет на другие службы. Пытаться:
источник
Убедитесь, что ваши файлы conf supervisor заканчиваются на .conf
Мне понадобилось время, чтобы понять это. Надеюсь, это поможет следующему человеку.
источник
Перезагрузка главного процесса супервизора может сработать, но у него будут непредвиденные побочные эффекты, если супервизор контролирует более одного процесса.
Правильный способ сделать это - выполнить команду,
supervisorctl reread
которая заставляет его сканировать файлы конфигурации на наличие изменений:Затем просто перезагрузите это приложение:
источник
avail
. Добавьте его в (пере) запускаемые процессы, выполнивsupervisorctl update
. См. Также ответ Марка serverfault.com/a/479754/125887supervisorctl update
было необходимо.Я столкнулся с этой проблемой, используя пакет supervisor, версия 3.0a8-1.1 из Ubuntu Server 12.10. Я решил проблему, прочитав встроенную справку:
В частности, вы хотите использовать синтаксис:
Как указано в документации по адресу: 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 в качестве примера того, как должна выглядеть минимальная конфигурация.
источник
У меня была похожая проблема (
myapp_live: ERROR (no such process)
), и это потому, что мое определение процесса былокогда это должно было быть
Хотя это не относится к заданному вопросу, я был здесь в поиске, который ищет решение моей проблемы, так что, надеюсь, другие тоже найдут его здесь.
источник
[program]
только, следуя документам, но заставляя это заставить[program:redis]
это работать для меня. Вещи, конечно, становятся странными время от времени!Я нашел это решение наиболее удобным:
РЕДАКТИРОВАТЬ: перед этим проверьте ваш путь supervisorctl с помощью,
which supervisorctl
чтобы убедиться, что вы добавляете правильный путь к sudoers.Добавьте эту строку в файл sudoers, используя
visudo
(где:myappuser
- пользователь, которому нужно перезапустить ваше приложение,myapp
- имя приложения):А потом просто:
Вы не привязаны к сценариям запуска дистрибутива и даете пользователю довольно узкие права на перезапуск вашего приложения gunicorn. Кроме того, вам не нужно заботиться о pid. Команда не запрашивает пароль, поэтому она подходит для сценариев bash / fabric с автоматическим развертыванием. С другой стороны - вы должны знать, что если supervisorctl уязвим к некоторой ошибке, вызывающей выполнение кода, злоумышленник может использовать эту привилегию sudo для запуска кода от имени пользователя root (но, насколько я знаю, такой ошибки не было обнаружено для supervisord и найти такую уязвимость очень важно).
источник
Читая код supervisorctl.py здесь: https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py
Вы можете видеть, что обновление supervisorctl (функция do_update) вызывает reloadConfig () точно так же, как и повторное чтение supervisorctl (функция do_reread).
Поэтому я думаю, что повторное чтение вызова не нужно, если вы вызываете обновление после него.
По результатам мерзавца, это было так, по крайней мере, с июля 2009 года.
источник
Вот контрольный список:
Новый файл конфигурации должен быть назван в соответствии с шаблоном включения, настроенным в /etc/supervisord.conf:
Как мы видим в моем случае, spam.ini будет включен, а spam.conf - нет.
Если вы создали новый файл, скопировав старый, обязательно измените
[program:]
строку. Потому что, если вы настолько глупы, как наличие двух файлов для одной и той же программы,supervisorctl reread
вы получите это безнадежное сообщение об ошибке в качестве наказания:Если ваш файл обнаружен,
supervisorctl reread
следует сказать что-то вроде:Затем
supervisorctl update spam
следует запустить его и сделать так, чтобы он появился вsupervisorctl status
.источник
Я обнаружил, что сценарии init.d ненадежны в различных версиях Ubuntu / Debian. Способ сделать это так:
источник
Будьте осторожны с символическими ссылками и включайте файлы в Supervisor. Это позволило бы любому человеку с привилегией w на /home/myapp/live/deploy/supervisord_live.ini изменить INI-файл и запустить любой вредоносный код. Эти INI-файлы должны находиться в каталоге conf вашего супервизора или в любом его подкаталоге.
источник
Я установил supervisrod с помощью yum install, который установил супервизор версии v2. *. Supervisor поддерживает внешние включения только из версии 3. Пришлось использовать easy_install вместо этого, чтобы установить supervisor v3.
источник