Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 第一个加芹菜的Django cron_Python_Django_Cron_Celery_Django Celery - Fatal编程技术网

Python 第一个加芹菜的Django cron

Python 第一个加芹菜的Django cron,python,django,cron,celery,django-celery,Python,Django,Cron,Celery,Django Celery,我读了很多关于芹菜和Django的文档,并尝试创建我的第一个cron任务 目标: 此任务应能够执行每天上午11:30清理特定表格的功能 我的代码: 一切似乎都很好,我看到芹菜的任务,但没有任何变化 我的base.py文件中有: INSTALLED_APPS = ( .... 'django_cron', ) CRON_CLASSES = [ "app.cron.cron.DeleteOldToken", ] CELERY_BROKER_URL = 'redis://l

我读了很多关于
芹菜
Django
的文档,并尝试创建我的第一个
cron任务

目标:

此任务应能够执行每天上午11:30清理特定表格的功能

我的代码:

一切似乎都很好,我看到芹菜的任务,但没有任何变化

我的base.py文件中有:

INSTALLED_APPS = (
    ....
    'django_cron',
)

CRON_CLASSES = [
    "app.cron.cron.DeleteOldToken",
]

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_IGNORE_RESULT = False
CELERY_TASK_TRACK_STARTED = True
# Add a one-minute timeout to all Celery tasks.
CELERYD_TASK_SOFT_TIME_LIMIT = 60
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings.base')

app = Celery('main')
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
# -*- coding: utf-8 -*-
from django_cron import CronJobBase, Schedule

from ..tasks import delete_old_token

class DeleteOldToken(CronJobBase):
    RUN_AT_TIMES = ['11:30']

    schedule = Schedule(run_at_times=RUN_AT_TIMES)
    code = 'app.delete_old_token'

    def do(self):
        delete_old_token()
我有一个芹菜.py文件:

INSTALLED_APPS = (
    ....
    'django_cron',
)

CRON_CLASSES = [
    "app.cron.cron.DeleteOldToken",
]

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_IGNORE_RESULT = False
CELERY_TASK_TRACK_STARTED = True
# Add a one-minute timeout to all Celery tasks.
CELERYD_TASK_SOFT_TIME_LIMIT = 60
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings.base')

app = Celery('main')
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
# -*- coding: utf-8 -*-
from django_cron import CronJobBase, Schedule

from ..tasks import delete_old_token

class DeleteOldToken(CronJobBase):
    RUN_AT_TIMES = ['11:30']

    schedule = Schedule(run_at_times=RUN_AT_TIMES)
    code = 'app.delete_old_token'

    def do(self):
        delete_old_token()
我有一个cron.py文件:

INSTALLED_APPS = (
    ....
    'django_cron',
)

CRON_CLASSES = [
    "app.cron.cron.DeleteOldToken",
]

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_IGNORE_RESULT = False
CELERY_TASK_TRACK_STARTED = True
# Add a one-minute timeout to all Celery tasks.
CELERYD_TASK_SOFT_TIME_LIMIT = 60
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'main.settings.base')

app = Celery('main')
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
# -*- coding: utf-8 -*-
from django_cron import CronJobBase, Schedule

from ..tasks import delete_old_token

class DeleteOldToken(CronJobBase):
    RUN_AT_TIMES = ['11:30']

    schedule = Schedule(run_at_times=RUN_AT_TIMES)
    code = 'app.delete_old_token'

    def do(self):
        delete_old_token()
以及文件tasks.py

# -*- coding: utf-8 -*-
import datetime
from datetime import datetime

from celery import shared_task, task
from dateutil.relativedelta import relativedelta
from django.conf import settings
from token_jwt.models import UserToken

@task()
def delete_old_token(self):
    for token in UserToken.objects.exclude(date_information__isnull=True):
        tdi = token.date_information
        if datetime(tdi.year, tdi.month, tdi.day) < datetime.now() + relativedelta(months=2):
            token.delete()
它显示:

 -------------- celery@pydev-jungbluth v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.15.0-45-generic-x86_64-with-debian-buster-sid 2019-02-08 11:29:10
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         main:0x7fd4befe5cf8
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . app.tasks.delete_old_token

[2019-02-08 11:29:10,889: INFO/MainProcess] Connected to redis://localhost:6379//
[2019-02-08 11:29:10,894: INFO/MainProcess] mingle: searching for neighbors
[2019-02-08 11:29:11,914: INFO/MainProcess] mingle: all alone
[2019-02-08 11:29:11,920: INFO/MainProcess] celery@pydev-jungbluth ready.
但什么也没有出现。我的cron任务似乎不起作用或无法执行

你知道吗

编辑:

芹菜节拍给了我:

$ celery -A main beat
celery beat v4.2.1 (windowlicker) is starting.
__    -    ... __   -        _
LocalTime -> 2019-02-08 12:03:22
Configuration ->
    . broker -> redis://localhost:6379//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%WARNING
    . maxinterval -> 5.00 minutes (300s)

django-cron
芹菜
没有接口。如果希望芹菜在预定时间运行作业,则需要使用。Django Cellery beat将允许您通过Django管理面板设置cron作业的时间表。使用时,您必须修改芹菜节拍,以使用以下选项开始:

--scheduler django_celery_beat.schedulers:DatabaseScheduler

可以看到完整的设置步骤。

Run
beat
它检查要执行的任务时间。
$celery-项目节拍
Run celery beatI添加了带有
celery beat的编辑部分