每天在特定时间将任务安排到 运行 一次 |芹菜

Schedule task to run once daily at specific time | Celery

我想在世界标准时间 16 点安排 运行 两个任务 每天一次。

为此,我实现了这个芹菜配置:

from celery.schedules import crontab


CELERY_IMPORTS = ('api.tasks')
CELERY_TASK_RESULT_EXPIRES = 30
CELERY_TIMEZONE = 'UTC'

CELERYBEAT_SCHEDULE = {
    'book-task': {
        'task': 'api.tasks.get_data',
        # At 16h UTC everyday
        'schedule': crontab(hour=16),
        'args': ({'book'}),
    },
    'pencils-task': {
        'task': 'api.tasks.get_data',
        # At 16h UTC everyday
        'schedule': crontab(hour=16),
        'args': ({'pencil'}),
    }
}

我 运行 celery worker -A app.celery --loglevel=info --pool=solo 给 运行 芹菜工人 运行 宁 celery beat -A app.celery 启动芹菜节拍。

使用上面的配置,我有两个任务 运行ning 每分钟从 16h UTC 开始。我的配置有什么问题以及如何解决?

您需要在 crontab 中指定 minute,不传递 minute 表示 the default value * is used 每分钟 运行 作业。

在一小时开始时将 minute=0 传递给 运行

from celery.schedules import crontab


CELERY_IMPORTS = ('api.tasks')
CELERY_TASK_RESULT_EXPIRES = 30
CELERY_TIMEZONE = 'UTC'

CELERYBEAT_SCHEDULE = {
    'book-task': {
        'task': 'api.tasks.get_data',
        # At 16h UTC everyday
        'schedule': crontab(minute=0, hour=16),
        'args': ({'book'}),
    },
    'pencils-task': {
        'task': 'api.tasks.get_data',
        # At 16h UTC everyday
        'schedule': crontab(minute=0, hour=16),
        'args': ({'pencil'}),
    }
}