Запуск Celery Celery в качестве службы не считывает переменные окружения на Ubuntu

Я завершил свой проект Django и хотел развернуть его. Поскольку проект использует celery, он должен быть демонизирован, чтобы запускаться после перезагрузки автоматически. Я могу запустить celery в окне терминала, и так как я установил кучу переменных окружения, он может определить их все.

(vuenv) vue@server:/home/dushyant/server/appdir/app$ celery -A appname worker --loglevel=INFO
This is BASE Directory /home/dushyant/server/appdir/app
Env Var: SK Exist
Env Var: ENV Exist
Current Environment is  production
Env Var: DB_PASS Exist
Env Var: DB_PASS Exist
This is static Root Directory /home/dushyant/server/appdir/app/static/
This is Media Root /mnt/mediadir/media/
Env Var: SERVER_EMAIL Exist
Env Var: SERVER_EMAIL Exist
Env Var: EMAIL_PASS Exist
[2021-09-28 18:47:32,648: WARNING/MainProcess] No hostname was supplied. Reverting to default 'localhost'
 
 -------------- celery@server v5.1.2 (sun-harmonics)
--- ***** ----- 
-- ******* ---- Linux-5.11.0-27-generic-x86_64-with-glibc2.29 2021-09-28 18:47:32
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         app:0x7fd24f21fa90
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

Изменил имена приложений и каталогов на общие имена для размещения их здесь.

Теперь я настроил службу для celery как пользователь vue и группа vue.

Файл: /etc/conf.d/celery

CELERYD_NODES="celery-worker"

CELERY_BIN="/home/dushyant/server/vuenv/bin/celery"

CELERY_APP="app"

CELERYD_MULTI="multi"

CELERYD_OPTS="--time-limit=300 --concurrency=8"

CELERYD_USER ="vue"
CELERYD_GROUP="vue"

CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_LOG_LEVEL="INFO"

CELERYBEAT_PID_FILE="/var/run/celery/beat.pid"
CELERYBEAT_LOG_FILE="/var/log/celery/beat.log"

Файл: /etc/systemd/system/celery.service

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

[Service]
Type=forking
User=vue
Group=vue
EnvironmentFile=/etc/conf.d/celery
WorkingDirectory=/home/dushyant/server/appdir/app/
ExecStart=/usr/bin/sh -c '${CELERY_BIN} -A $CELERY_APP multi start $CELERYD_NODES \
    --pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \
    --loglevel="${CELERYD_LOG_LEVEL}" $CELERYD_OPTS'
ExecStop=/usr/bin/sh -c '${CELERY_BIN} multi stopwait $CELERYD_NODES \
    --pidfile=${CELERYD_PID_FILE} --loglevel="${CELERYD_LOG_LEVEL}"'
ExecReload=/usr/bin/sh -c '${CELERY_BIN} -A $CELERY_APP multi restart $CELERYD_NODES \
    --pidfile=${CELERYD_PID_FILE} --logfile=${CELERYD_LOG_FILE} \
    --loglevel="${CELERYD_LOG_LEVEL}" $CELERYD_OPTS'
Restart=on-failure
[Install]
WantedBy=multi-user.target

Ошибки при запуске службы с помощью journalctl

 File "/home/dushyant/server/vuenv/lib/python3.8/site-packages/django/conf/__init__.py", line 189, in __init__
 raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
This is BASE Directory /home/dushyant/server/appdir/app
 Env Var: SK  do not exist
 Env Var: ENV  do not exist
 Current Environment is  None
 Env Var: DB_PASS  do not exist
 Env Var: DB_PASS  do not exist
 This is static Root Directory /home/dushyant/server/appdir/app/static/
 This is Media Root /mnt/mediadir/media/
 Env Var: SERVER_EMAIL  do not exist
 Env Var: SERVER_EMAIL  do not exist
 Env Var: EMAIL_PASS  do not exist
 celery multi v5.1.2 (sun-harmonics)
 > Starting nodes...
         > celery-worker@server: * Child terminated with exit code 1

Этот журнал ошибок показывает, что при запуске celery в качестве службы он не может получить переменные окружения, что приводит к ошибке. У меня все переменные окружения установлены для пользователя "vue" и для моего администратора "dushyant". Похоже, что он не получает переменные ни от одного из них. Я хотел бы получить помощь по этому поводу или есть ли другой способ сделать то же самое.

В вопросе спрашивается, что переменные окружения не считываются. EnvironmentFile упоминается в /etc/conf.d/celery должен содержать все окружения, необходимые для запуска.Для службы и для любой задачи, запущенной после службы. Упомяните все ваши переменные окружения в файле следующим образом.

CELERYD_NODES="celery-worker"

CELERY_BIN="/home/dushyant/server/vuenv/bin/celery"

CELERY_APP="app"

CELERYD_MULTI="multi"

CELERYD_OPTS="--time-limit=300 --concurrency=8"

CELERYD_USER ="vue"
CELERYD_GROUP="vue"
...
SK="Secret Key"
MEDIA_DIR= "Media/direcotory/location"
EMAIL = "app@email.com"
.
.

Это передаст переменные окружения в службу celery для использования при инициировании службы.

Вернуться на верх