#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
в среде не устраняет проблему, и я продолжаю получать одно и то же сообщение об ошибке. Я уже пытался запустить команду запуска службы вручную и все работает нормально, и работник сельдерея инициирован, есть идеи по поводу того, что я делаю не так? Я искал похожие проблемы с демонизацией сельдерея, но пока ничего не нашел.