Цветок сельдерея не работает под управлением супервайзера

У меня Ubuntu 14.04.4 LTS работает как бродячая среда под виртуальным боксом. В этом поле у ​​меня есть такая конфигурация:

  • руководитель 3.0b2

  • Python 3.4 в виртуальной среде

  • сельдерей 3.1.23

  • цветок 0.9.1

Конфигурация цветка под супервизором:

[program:flower]
command=/home/vagrant/.virtualenvs/meridian/bin/python /vagrant/meridian/meridian/manage.py celery flower --loglevel=INFO -conf=/vagrant/meridian/meridian/meridian/flowerconfig.py
directory=/vagrant/meridian/meridian
user=vagrant
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/flower-stdout.log
stderr_logfile=/var/log/supervisor/flower-stderr.log
priority=997
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5

Flowerconfig.py — это пустой файл. Так что все значения по умолчанию. Хост локальный, порт 5555.

Когда я запускаю цветок из командной строки:

бродяга@localhost> цветок

он запускается так, как должен, и я вижу результат выполнения задач в своем браузере, посетив адрес localhost: 5555.

netstat показывает мне прослушиваемые порты:

vagrant@localhost> netstat -l | группа 5555

tcp        0      0 *:5555                  *:*                     LISTEN
tcp6       0      0 [::]:5555               [::]:*                  LISTEN

So, it is OK.

Когда я запускаю поток под супервизором следующим образом:

vagrant@localhost> sudo supervisorctl запустить цветок

запускается как надо. Netstat показывает, что прослушивается порт 5555. Но запрос из браузера просто зависает.

Почему цветок не отвечает под руководством?


person Roman Storozhenko    schedule 02.09.2016    source источник
comment
Не запускайте цветок как бродячий пользователь, запускайте его точно так же, как команду, которую вы предоставляете supervisorctl. /home/vagrant/.virtualenvs/meridian/bin/python /vagrant/meridian/meridian/manage.py цветок сельдерея --loglevel=INFO -conf=/vagrant/meridian/meridian/meridian/flowerconfig.py в каталоге /vagrant /меридиан/меридиан   -  person lapinkoira    schedule 02.09.2016
comment
@lapinkoira Я пробовал этот подход, и он не работает. Однако я понял, что команда из конфигурации супервизора как есть тоже не работает, потому что это не то же самое, что эта последовательность: 1) работа на меридиане 2) цветок -- ... (команда цветок появилась только после того, как виртуальная среда активировано) Итак, теперь мне нужно выяснить, как запустить две упомянутые команды в одном разделе конфигурации супервизора.   -  person Roman Storozhenko    schedule 02.09.2016
comment
Вам не нужно работать, если вы используете свою корзину python внутри virtualenv   -  person lapinkoira    schedule 04.09.2016


Ответы (1)


Я нашел решение. Проблема заключалась в том, что я запускал цветок не в своей виртуальной среде. Я добавил файл оболочки "start_flower.sh":

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
source /home/vagrant/.virtualenvs/meridian/bin/activate
workon meridian
exec flower --conf=/vagrant/meridian/meridian/meridian/flowerconfig.py

и он начал работать как надо.

Затем я переписал конфигурацию супервизора для цветка следующим образом:

[program:flower]
command=bash -c "/vagrant/meridian/meridian/start_flower.sh"
directory=/vagrant/meridian/meridian
user=vagrant
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/flower-stdout.log
stderr_logfile=/var/log/supervisor/flower-stderr.log
priority=997
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5
stopasgroup=true 
killasgroup=true

и сейчас все хорошо.

Примечание: хочу обратить ваше внимание на то, что я запускаю цветок в файле оболочки с помощью «exec»:

exec flower --conf=/vagrant/meridian/meridian/meridian/flowerconfig.py

Я использую это там, потому что, когда я использую эту конструкцию:

flower --conf=/vagrant/meridian/meridian/meridian/flowerconfig.py

У меня была проблема - процесс файла оболочки был завершен:

sudo supervisorctl stop flower

Но цветочный процесс все равно работал!

Поэтому, если вы столкнетесь с такой проблемой, всегда используйте «exec». Это хорошая дополнительная информация для таких случаев:

http://veithen.github.io/2014/11/16/sigterm-propagation.html

person Roman Storozhenko    schedule 12.09.2016