Ошибки при запуске демона Сельдерея

#ubuntu #celery #systemd #django-celery #celeryd

Вопрос:

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

Вот мое /etc/default/celeryd досье:

 CELERYD_NODES="worker1"

CELERY_BIN="/home/jim/.virtualenv/bin/celery"

CELERY_APP="mysite"

CELERYD_CHDIR="/home/jim/mysite/"

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

# %n will be replaced with the first part of the node name.
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"

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

CELERYD_USER="jim"
CELERYD_GROUP="jim"
CELERYD_LOG_LEVEL="INFO"

CELERY_CREATE_DIRS=1
 

А вот мое /etc/systemd/system/celery.service досье:

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

[Service]
Type=forking
User=jim
Group=jim
EnvironmentFile=/etc/default/celeryd
WorkingDirectory=/home/jim/mysite
ExecStart=/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=/bin/sh -c '${CELERY_BIN} multi stopwait ${CELERYD_NODES} --pidfile=${CELERYD_PID_FILE} --loglevel=${CELERYD_LOG_LEVEL}'
ExecReload=/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=always

[Install]
WantedBy=multi-user.target
 

Теперь, если я выполню эти две команды:

 sudo systemctl daemon-reload
sudo systemctl start celery.service
 

Я получаю этот вывод при запуске службы:

Задание для celery.service завершилось неудачно, так как процесс управления завершился с кодом ошибки. Дополнительные сведения см. в разделах «systemctl статус celery.service» и «journalctl-xe».

sudo systemctl status celery.service выводит это, что не дает мне много информации о конкретной проблеме (возможно, я что-то упускаю).:

 ● celery.service - Celery Service
   Loaded: loaded (/etc/systemd/system/celery.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2021-07-21 14:17:57 UTC; 1min 18s ago
  Process: 18279 ExecStart=/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} (code=exited, status=1/FAILURE)

 Main PID: 23362 (code=exited, status=1/FAILURE)

Jul 21 14:17:56 domain.com systemd[1]: celery.service: Control process exited, code=exited status=1
Jul 21 14:17:56 domain.com systemd[1]: celery.service: Failed with result 'exit-code'.
Jul 21 14:17:56 domain.com systemd[1]: Failed to start Celery Service.
Jul 21 14:17:57 domain.com systemd[1]: celery.service: Service hold-off time over, scheduling restart.
Jul 21 14:17:57 domain.com systemd[1]: celery.service: Scheduled restart job, restart counter is at 5.
Jul 21 14:17:57 domain.com systemd[1]: Stopped Celery Service.
Jul 21 14:17:57 domain.com systemd[1]: celery.service: Start request repeated too quickly.
Jul 21 14:17:57 domain.com systemd[1]: celery.service: Failed with result 'exit-code'.
Jul 21 14:17:57 domain.com systemd[1]: Failed to start Celery Service.
 

However, running journalctl -xe shows this error log:

 Jul 21 14:21:30 domain.com systemd[18367]: celery.service: Executing: /bin/sh -c '/home/jim/.virtualenv/bin/celery -A mysite multi start worker1 --pidfile=/var/run/celery/%n.pid --logfile=/var/log/celery/%n%I.log --loglevel=INFO --time-limit=300 --concurrency=8'
Jul 21 14:21:30 domain.com sh[18367]: Traceback (most recent call last):
Jul 21 14:21:30 domain.com sh[18367]:   File "/home/jim/.virtualenv/bin/celery", line 8, in <module>
Jul 21 14:21:30 domain.com sh[18367]:     sys.exit(main())
Jul 21 14:21:30 domain.com sh[18367]:   File "/home/jim/.virtualenv/lib/python3.6/site-packages/celery/__main__.py", line 15, in main
Jul 21 14:21:30 domain.com sh[18367]:     sys.exit(_main())
Jul 21 14:21:30 domain.com sh[18367]:   File "/home/jim/.virtualenv/lib/python3.6/site-packages/celery/bin/celery.py", line 213, in main
Jul 21 14:21:30 domain.com sh[18367]:     return celery(auto_envvar_prefix="CELERY")
Jul 21 14:21:30 domain.com sh[18367]:   File "/home/jim/.virtualenv/lib/python3.6/site-packages/click/core.py", line 829, in __call__
Jul 21 14:21:30 domain.com sh[18367]:     return self.main(*args, **kwargs)
Jul 21 14:21:30 domain.com sh[18367]:   File "/home/jim/.virtualenv/lib/python3.6/site-packages/click/core.py", line 760, in main
Jul 21 14:21:30 domain.com sh[18367]:     _verify_python3_env()
Jul 21 14:21:30 domain.com sh[18367]:   File "/home/jim/.virtualenv/lib/python3.6/site-packages/click/_unicodefun.py", line 130, in _verify_python3_env
Jul 21 14:21:30 domain.com sh[18367]:     " mitigation steps.{}".format(extra)
Jul 21 14:21:30 domain.com sh[18367]: RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Consult https://click.palletsproject
Jul 21 14:21:30 domain.com sh[18367]: This system supports the C.UTF-8 locale which is recommended. You might be able to resolve your issue by exporting the following environment variables:
Jul 21 14:21:30 domain.com sh[18367]:     export LC_ALL=C.UTF-8
Jul 21 14:21:30 domain.com sh[18367]:     export LANG=C.UTF-8
 

Мне нужно уточнить, что даже экспорт этих двух переменных LC_ALL=C.UTF-8 и LANG=C.UTF-8 в среде не устраняет проблему, и я продолжаю получать одно и то же сообщение об ошибке. Я уже пытался запустить команду запуска службы вручную и все работает нормально, и работник сельдерея инициирован, есть идеи по поводу того, что я делаю не так? Я искал похожие проблемы с демонизацией сельдерея, но пока ничего не нашел.