Запуск рабочего сельдерея + взбивание в одной емкостиPython

Программы на Python
Ответить
Anonymous
 Запуск рабочего сельдерея + взбивание в одной емкости

Сообщение Anonymous »

Мое приложение flask состоит из четырех контейнеров: веб-приложения, postgres, RabbitMQ и Celery. Поскольку у меня есть задачи celery, которые выполняются периодически, я использую celery Beat. Я настроил свой файл docker-compose следующим образом:

version: '2'
services:
rabbit:
# ...
web:
# ...
rabbit:
# ...
celery:
build:
context: .
dockerfile: Dockerfile.celery


А мой Dockerfile.celery выглядит так:

# ...code up here...
CMD ["celery", "-A", "app.tasks.celery", "worker", "-B", "-l", "INFO"]


Хотя я прочитал в документации, что мне не следует запускать в производство опцию -B, я все равно поспешно добавил ее (и забыл об ее изменении ) и быстро узнал, что мои запланированные задачи выполнялись несколько раз. Для интересующихся, если сделать ps aux | grep celery из контейнера сельдерея, вы увидите несколько запущенных процессов celery +beat (но должен быть только один битовый процесс и сколько угодно рабочих процессов). Из документации я не был уверен, почему не следует запускать -B в рабочей среде, но теперь я знаю.

Поэтому я изменил свой Dockerfile.celery куда:

# ...code up here...
CMD ["celery", "-A", "app.tasks.celery", "worker", "-l", "INFO"]
CMD ["celery", "-A", "app.tasks.celery", "beat", "-l", "INFO"]


Нет, когда я запускаю приложение, рабочие процессы запускаются, а бит - нет. Когда я переворачиваю эти команды так, чтобы сначала вызывался бит, затем запускается бит, а рабочие процессы - нет. Итак, мой вопрос: как мне запустить работника сельдерея + взбить в моем контейнере? Я просмотрел множество статей/документов, но так и не смог разобраться.

ОТРЕДАКТИРОВАНО

Я изменил свой Dockerfile.celery на следующий:

ENTRYPOINT [ "/bin/sh" ]
CMD [ "./docker.celery.sh" ]


А мой файл docker.celery.sh выглядит так:

#!/bin/sh -ex
celery -A app.tasks.celery beat -l debug &
celery -A app.tasks.celery worker -l info &


Однако я получаю сообщение об ошибке: celery_1 завершен с кодом 0.

Изменить № 2

Я добавил следующую команду блокировки в конец моего файла docker.celery.sh, и все было исправлено:

tail -f /dev/null


Подробнее здесь: https://stackoverflow.com/questions/496 ... -container
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»