Как настроить сельдерей в качестве демона - PullRequest
1 голос
/ 30 марта 2020

Я столкнулся с необходимостью установить celery в качестве демона для моего django проекта на сервере Ubuntu 16.04, при этом я столкнулся с несколькими недоразумениями, которые я опишу в своем вопросе. Я знаю, что по заданным правилам стека следует задавать только один четкий вопрос, но я задам несколько в одном вопросе, потому что первый вопрос возник из второго и т. Д. c.

Для настройки сельдерея в качестве демона я решил использовать SystemD. В документации Демонизация сельдерея есть руководство, но оно не так понятно, как я хочу, возможно, потому что я новичок. Мой первый вопрос: я должен установить отдельно сельдерей и сельдерея? Вот документация, приведенная в качестве примера конфигурации

[Unit] 
Description=Celery Service    
After=network.target 

[Service] 
Type=forking 
User=celery 
Group=celery 
EnvironmentFile=/etc/conf.d/celery 
WorkingDirectory=/opt/celery 
ExecStart=/bin/sh -c '${CELERY_BIN}    multi start ${CELERYD_NODES} \ -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \ --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' 
ExecStop=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} \ --pidfile=${CELERYD_PID_FILE}'  
ExecReload=/bin/sh -c '${CELERY_BIN} multi restart ${CELERYD_NODES} \ -A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \ --logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}' 

[Install] WantedBy=multi-user.target

Все мои недоразумения касаются этого фрагмента кода, и следующий вопрос:

Что user и group Я должен указать в Сервисной части конфигурации? в приведенном выше примере документации celery указан для пользователя и группы, но когда я проверил пользователей и группы в своей Ubuntu, у меня нет пользователя и группы celery, если я должен создать такого пользователя и группу, если ответ «да», какие права я должен предоставить для пользователя celery и группа? Или я должен указать в настройках пользователя и группы моего пользователя Ubuntu, под которым я работаю на сервере?

Следующий вопрос относится ко всем переменным, которые использовались для указания различных частей настроек, например, в приведенном выше примере конфигурации в ExecStart настройки имеют несколько переменных

${CELERY_BIN}   
${CELERYD_NODES} 
${CELERY_APP} 
${CELERYD_PID_FILE} 
${CELERYD_LOG_FILE} 
${CELERYD_LOG_LEVEL} 
${CELERYD_OPTS}' 

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

Следующий вопрос об этой настройке

EnvironmentFile=/etc/conf.d/celery

Что мне следует указать здесь, потому что у меня нет этого файла в моей системе ? Должен ли я создать это? Кажется, это настройки по умолчанию для сельдерея, но я использую django и все связанные настройки для сельдерея, которые я указал в моем файле django project settings.py

Кто-нибудь может мне помочь? Заранее благодарен

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я тоже изо всех сил пытался понять и выполнить инструкции, приведенные в руководстве по демонизации celeryproject.org для systemd . Наконец, я просто использовал общие инструкции по демонизации, и это сработало. Я использую Flask, но я полагаю, что это должно работать и для вас:

Это мой celery.service файл. У меня flask и сельдерей, работающий в виртуальной среде ( venv ):

[Unit]
Description=Celery Service
After=network.target

[Service]
User=your_username
WorkingDirectory=/home/your_username/your_projdir
Environment="PATH=/home/your_username/your_projdir/venv/bin"
ExecStart=/home/your_username/your_projdir/venv/bin/celery worker -A celery_worker.celery --loglevel=info

[Install]
WantedBy=default.target

Вы можете добавить дополнительные команды здесь и выбрать включение EnvironmentFile , но эта простая установка работала хорошо для меня.

0 голосов
/ 30 марта 2020

Да, создать нового пользователя (celery - хорошее имя). Нет необходимости в каких-либо специальных атрибутах. Обычный пользователь должен быть в порядке. Вы определяете необходимые переменные среды в файле /etc/conf.d/celery.

Допустим, вы создали celery пользователя в /home/celery ... Войдите в систему как этот пользователь и создайте * Виртуальная среда 1016 * 3: python3 -m venv ~/venv. После этого ваш /etc/conf.d/celery должен иметь что-то вроде:

CELERY_BIN=/home/celery/venv/bin/celery   
CELERY_APP=myproject.myapp               # change this to however you named it
CELERY_OPTS=-Ofair -c12                  # any other options here

Здесь вам нужно определить все переменные, которые вы использовали в файле службы systemd.

Также нет необходимости в /bin/sh -c в Exec {Start / Stop / Reload} - ${CELERY_BIN} multi ... будет работать, так как $ {CELERY_BIN} должен указывать на скрипт Celery в вашей виртуальной среде, который является исполняемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...