芹菜甚至以为每两个小时就设置一次,就可以每分钟完成一次跑步任务

时间:2019-01-09 10:47:11

标签: celery celerybeat

我正在尝试使用芹菜节拍来每天在特定时间运行任务。 但是出于测试目的,我设置了两个任务,每两个小时运行一次,这就是我的配置:

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-compose在Docker容器中运行,因此我确保重新构建应用程序的映像并重新启动容器。

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

我还能做什么调试呢?

感谢您的帮助,

谢谢

1 个答案:

答案 0 :(得分:2)

您的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'])
    }
}