Сельдерей не регистрировать периодические задачи - PullRequest
0 голосов
/ 03 декабря 2018

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

Вот мой вывод консоли:

------------- celery@andrey-MS-7996 v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.15.0-39-generic-x86_64-with-Ubuntu-18.04-bionic 2018-12-03 13:49:13
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         sjimalka:0x7fa69bef3e48
- ** ---------- .> transport:   redis://localhost:6379/0
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 2 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]


[2018-12-03 13:49:13,380: INFO/Beat] beat: Starting...
[2018-12-03 13:49:13,385: INFO/MainProcess] Connected to redis://localhost:6379/0
[2018-12-03 13:49:13,392: INFO/MainProcess] mingle: searching for neighbors
[2018-12-03 13:49:14,409: INFO/MainProcess] mingle: all alone
[2018-12-03 13:49:14,432: WARNING/MainProcess] /home/andrey/.local/lib/python3.6/site-packages/celery/fixups/django.py:200: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warnings.warn('Using settings.DEBUG leads to a memory leak, never '
[2018-12-03 13:49:14,433: INFO/MainProcess] celery@andrey-MS-7996 ready.

init .py

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sjimalka.settings')

app = Celery('sjimalka')

app.conf.timezone = 'Europe/Moscow'
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

settings.py

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Europe/Moscow'
CELERY_BEAT_SCHEDULE = {
    'delete_old_foos': {
        'task': 'main.tasks.delete_old_foos',
        'schedule': crontab(minute=5)
    },
}

redis_host = os.environ.get('REDIS_HOST', 'localhost') 

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

main.tasks.py

from celery import Celery
from celery.schedules import crontab
from celery.task import periodic_task
from django.utils import timezone
from main.models import image, imagenew, FtpPath
import os
from os import path as ospath
import datetime
from ftplib import FTP
from PIL import Image
from PIL import ImageFile
import shutil
import piexif
import cv2 as cv

app = Celery()

@periodic_task(run_every=crontab(minute='*/5'))
def delete_old_foos():
    imgs = image.objects.all()
    imgnews = imagenew.objects.all()

    for img in imgs:
        if img.delete_time < timezone.now() and img.deleted == False:
            image.objects.filter(pk=img.pk).update(deleted=True)
            try:
                os.remove('/home/andrey/sjimalka'+ img.image.url)
            except OSError:
                pass

    for imgnew in imgnews:
        if imgnew.delete_time < timezone.now() and imgnew.deleted == False:
            imagenew.objects.filter(pk=imgnew.pk).update(deleted=True)
            try:
                os.remove('/home/andrey/sjimalka'+ imgnew.image.url) 
            except OSError:
                pass

    shutil.rmtree('/home/andrey/sjimalka/media/archives/')
    os.chdir("/home/andrey/sjimalka/media/")
    os.mkdir('archives')

    return "completed deleting foos at {}".format(timezone.now())

Сельдерей не может видеть задачу delete_old_foos и другие, и я просто не могу понять, почему.Вот структура моего проекта: структура .Я не касался проекта в течение 2 недель, и тогда он работал нормально.Если я бегу просто с сельдереем, он работает нормально.Но рабочие просто не видят задач, а я пока не вижу никаких ошибок.Я бегу сельдерея с:

celery -A sjimalka worker -l info -B
...