Celery 每分钟击败 运行 个任务,甚至认为它设置为每两个小时一次

Celery beat running tasks every minute even thought It's set for every two hours

我正在尝试每天在特定时间使用 celery beat 运行 任务。 但是出于测试目的,我每两个小时将两个任务设置为 运行,这就是我的配置:

CELERYBEAT_SCHEDULE = {
    'daily-google-connect': {
        'task': 'app.engine.schedule_fetcher',
        'schedule': crontab(hour='*/2'),
        'args': (['G'])
    },
    'daily-facebook-connect': {
        'task': 'app.engine.schedule_fetcher',
        'schedule': crontab(hour='*/2'),
        'args': (['F'])
    }
}

我就是这样运行芹菜的:

celery beat -A app.engine.celery --schedule=/tmp/celerybeat-schedule --pidfile=/tmp/celerybeat.pid -l info

Docker 容器中的所有 运行s 使用 docker-compose,因此我确保重新构建应用程序的映像并重新启动容器。

我什至进入 运行ning 容器,我在代码中看到了 crontab 设置...但是在我的日志中,我每分钟看到任务 运行ning。

我还能做些什么来调试它?

感谢任何帮助,

谢谢

您的 crontab 配置为 运行“每 2 小时后 每分钟 ”。

from celery.schedules import crontab

str(crontab(hour='*/2'))
'<crontab: * */2 * * * (m/h/d/dM/MY)>'

参考:https://crontab.guru/#*_*/2_*_*_*

“每两小时”的正确 crontab 是:0 */2 * * *

参考:https://crontab.guru/every-2-hours

这应该可以解决您的问题:

CELERYBEAT_SCHEDULE = {
    'daily-google-connect': {
        'task': 'app.engine.schedule_fetcher',
        'schedule': crontab(minute='0', hour='*/2'),
        'args': (['G'])
    },
    'daily-facebook-connect': {
        'task': 'app.engine.schedule_fetcher',
        'schedule': crontab(minute='0', hour='*/2'),
        'args': (['F'])
    }
}