Демон django celery работает: он не может создать файл pid

Я не могу запустить службу mi celeryd и celerybeat, я использовал тот же код в другой среде (настроил все с самого начала), но здесь не работает. Я думаю, что это было по разрешениям, но я не мог его запустить. пожалуйста, помогите мне.

это мой конфиг сельдерея на settings.py

CELERY_RESULT_BACKEND = ‘djcelery.backends.database:DatabaseBackend’
CELERY_BROKER_URL = ‘amqp://localhost’
CELERY_ACCEPT_CONTENT = [‘json’]
CELERY_TASK_SERIALIZER = ‘json’
CELERY_RESULT_SERIALIZER = ‘json’
CELERYBEAT_SCHEDULER =  ‘djcelery.schedulers.DatabaseScheduler’
CELERY_ENABLE_UTC = True
CELERY_TIMEZONE = TIME_ZONE  # ‘America/Lima’
CELERY_BEAT_SCHEDULE= {}

это мой файл /etc/init.d/celeryd

https://github.com/celery/celery/blob/master/extra/generic-init.d/celeryd 

тогда я использую

sudo chmod 755 /etc/init.d/celeryd
sudo chown admin1:admin1 /etc/init.d/celeryd

и я создал /etc/default/celeryd

CELERY_BIN="/home/admin1/Env/tos/bin/celery"

# App instance to use
CELERY_APP="tos"

# Where to chdir at start.
CELERYD_CHDIR="/home/admin1/webapps/tos/"

# Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"

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

# Workers should run as an unprivileged user.
#   You need to create this user manually (or you can choose
#   a user/group combination that already exists (e.g., nobody).
CELERYD_USER="admin1"
CELERYD_GROUP="admin1"

# If enabled pid and log directories will be created if missing,
# and owned by the userid/group configured.
CELERY_CREATE_DIRS=1

export SECRET_KEY="foobar"

для celerybeat я создаю файл в /etc/init.d/celerybeat с помощью:

https://github.com/celery/celery/blob/master/extra/generic-init.d/celerybeat

и запустите службу следующим образом:

sudo /etc/init.d/celeryd start
sudo /etc/init.d/celerybeat start

и у меня есть эта ошибка:

sudo: imposible resolver el anfitrión SIO
celery init v10.1.
Using config script: /etc/default/celeryd
celery multi v3.1.25 (Cipater)
> Starting nodes...
    > celery@SIO-PRODUCION: OK
ERROR: Pidfile (celery.pid) already exists.
Seems we're already running? (pid: 30198)
/etc/init.d/celeryd: 515: /etc/init.d/celeryd: --pidfile=/var/run/celery/%n.pid: not found

Я также получил это, когда проверил это с помощью:

sudo C_FAKEFORK=1 sh -x /etc/init.d/celeryd start
some data .....


starting nodes...
ERROR: Pidfile (celery.pid) already exists.
Seems we're already running? (pid: 30198)
    > celery@SIO-PRODUCION: * Child terminated with errorcode 73
FAILED
+ --pidfile=/var/run/celery/%n.pid
/etc/init.d/celeryd: 515: /etc/init.d/celeryd: --pidfile=/var/run/celery/%n.pid: not found
+ --logfile=/var/log/celery/%n%I.log
/etc/init.d/celeryd: 517: /etc/init.d/celeryd: --logfile=/var/log/celery/%n%I.log: not found
+ --loglevel=INFO
/etc/init.d/celeryd: 519: /etc/init.d/celeryd: --loglevel=INFO: not found
+ --app=tos
/etc/init.d/celeryd: 521: /etc/init.d/celeryd: --app=tos: not found
+ --time-limit=300 --concurrency=8
/etc/init.d/celeryd: 523: /etc/init.d/celeryd: --time-limit=300: not found
+ exit 0

person AsPolar    schedule 16.02.2018    source источник
comment
Из ваших журналов неясно, существует ли уже файл pid или «% n» не заменено именем вашего узла. Вы всегда можете попробовать запустить сельдерей таким образом и поиграть с параметрами: 'python -m celery worker -A your_celery_app_name --pidfile=/tmp/test.pid --uid=‹uid вашего администратора› --gid=‹gid вашего пользователя-администратора» (проверьте python -m celery worker --help для параметров.   -  person Greg0ry    schedule 17.02.2018


Ответы (2)


У меня такая же проблема, и я решил ее так:

rm -f /webapps/celery.pid && /etc/init.d/celeryd start

Вы можете попробовать сделать это. Перед запуском celery очищаем pid-файлы через амперсанд, склеивая команды.

person Денис Суховерхов    schedule 17.02.2018

Другой способ, создайте команду django

import shlex
import subprocess

from django.core.management.base import BaseCommand


class Command(BaseCommand):
    def handle(self, *args, **options):
        kill_worker_cmd = 'pkill -9 celery'
        subprocess.call(shlex.split(kill_worker_cmd))

Позвоните перед тем, как начать, или просто

pkill -9 celery
person Victor Villacorta    schedule 22.03.2019