我正在尝试使用芹菜节拍来每天在特定时间运行任务。 但是出于测试目的,我设置了两个任务,每两个小时运行一次,这就是我的配置:
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设置...但是在我的日志中,我看到任务每分钟都在运行。
我还能做什么调试呢?
感谢您的帮助,
谢谢
答案 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'])
}
}