ОШИБКА: Pidfile (celerybeat.pid) уже существует - PullRequest
0 голосов
/ 17 мая 2018

Эта проблема возникает при перестройке и повторном запуске cookiecutter-django docker-compose в процессе производства. Я могу решить эту проблему либо удалив все остановленные контейнеры Docker, либо добавив rm -f './celerybeat.pid' в /compose/production/django/celery/beat/start.sh аналогично /compose/local/django/celery/beat/start.sh. Есть ли причина не включать этот конкретный код в рабочую версию составного файла?

Ответы [ 3 ]

0 голосов
/ 23 марта 2019

Другой способ - создать команду django celery_kill.py

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))

docker-compose.yml:

celery:
    build: ./src
    restart: always
    command: celery -A project worker -l info
    volumes:
      - ./src:/var/lib/celery/data/
    depends_on:
      - db
      - redis
      - app

  celery-beat:
    build: ./src
    restart: always
    command: celery -A project beat -l info --pidfile=/tmp/celeryd.pid
    volumes:
      - ./src:/var/lib/beat/data/
    depends_on:
      - db
      - redis
      - app

и Makefile:

run:
    docker-compose up -d --force-recreate
    docker-compose exec app python manage.py celery_kill
    docker-compose restart
    docker-compose exec app python manage.py migrate
0 голосов
/ 23 марта 2019

Если вы можете жить без beat, у сельдерея есть способ обрабатывать периодические задачи, передавая флаг «B».Когда вы делаете это, файл .pid не создается, создается файл celerybeat-schedule.Когда вы перезапустите сельдерей, он не будет жаловаться на повторное использование этого файла.Что касается управления исходным кодом, просто добавьте его в свой .gitignore.

Вот команда в полной форме:

celery -A <appname> worker -l info -BE

0 голосов
/ 28 ноября 2018

Вы можете использовать celery worker --pidfile=/path/to/celeryd.pid, чтобы указать не смонтированный путь, чтобы он не был зеркальным на хосте.

...