Рабочий сельдерея, работающий из командной строки, но не как демон, в virtualenv

Системная информация

Ubuntu 12.04 LTS

Django 1.5.5

Python 2.7.3

Сельдерей 3.1.9

Я запускаю это на бродячей виртуальной машине (с марионеткой) и пытаюсь настроить сельдерей для запуска рабочего как демона, как описано в документации по сельдерею здесь, а также описанная настройка сельдерея для django здесь. Я использую virtualenv для проекта, расположенного по адресу

/home/vagrant/virtualenvs/myproj

Фактические файлы проекта находятся по адресу

/srv/myproj

Мне удалось без проблем запустить воркер и планировщик ударов, если он находится в каталоге / srv / myproj с помощью операторов командной строки.

~/virtualenvs/myproj/bin/celery -A app beat
~/virtualenvs/myproj/bin/celery worker -A app

И beat, и рабочий запускаются без проблем, а запланированная задача передается работнику и выполняется. Проблема возникает, когда я пытаюсь запустить их как фоновые процессы. Я использую скрипты из celery github repo в /etc/init.d/ и используя следующие параметры конфигурации в моих файлах celeryd и celerybeat, расположенных в / etc / default

CELERY_BIN="/home/vagrant/virtualenvs/myproj/bin/celery"
CELERYD_CHDIR="/srv/myproj"

Попытка запустить службы как sudo с

sudo service celeryd start
sudo service celerybeat start

Вызывает сообщение об ошибке, я считаю, что это потому, что он использует python, расположенный в usr / lib, вместо python в virtualenv. Выведенная ошибка - это имя, которое невозможно импортировать (пакет существует в virtualenv, но не глобально, следовательно, мое предположение).

Я также заметил, что в разделе «Запуск воркера в качестве демона» указано, что воркеры должны работать как непривилегированные пользователи, и что вы должны запускать воркеры и работать с ними, используя команду multi или --detach. Таким образом, я смог запустить воркера (не бить), но все файлы .log и .pid создаются в моем текущем каталоге, а не там, где я указал в конфигурационном файле / etc / default / celeryd.

Есть ли у кого-нибудь решение, чтобы заставить сельдерей работать в virtualenv? Я чувствую себя очень близко и упускаю из виду какую-то простую часть конфигурации.


person bgrantdev    schedule 13.03.2014    source источник


Ответы (1)


В конце концов мне удалось заставить это работать, используя супервизор и установив переменные среды в параметре среды [program: celery].

person bgrantdev    schedule 19.03.2014
comment
взгляните на эту ссылку - person Manish; 25.01.2017