我正在尝试使用 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'])
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我运行芹菜的方式:
celery beat -A app.engine.celery --schedule=/tmp/celerybeat-schedule --pidfile=/tmp/celerybeat.pid -l info
Run Code Online (Sandbox Code Playgroud)
所有内容都使用 docker-compose 在 Docker 容器中运行,因此我确保重新构建应用程序的映像并重新启动容器。
我什至进入正在运行的容器,我在代码中看到了 crontab 设置...但是在我的日志中,我看到任务每分钟都在运行。
我还能做什么来调试这个?
我很感激任何帮助,
谢谢
ill*_*nan 18
您的 crontab 配置为每分钟运行 \xe2\x80\x9eAt每 2 小时后的
\n\nfrom celery.schedules import crontab\n\nstr(crontab(hour=\'*/2\'))\n\'<crontab: * */2 * * * (m/h/d/dM/MY)>\'\nRun Code Online (Sandbox Code Playgroud)\n\n参考:https://crontab.guru/#*_*/2_*_*_*
\xe2\x80\x9e每两小时\xe2\x80\x9c 的正确 crontab 是:0 */2 * * *。
参考:https://crontab.guru/every-2-hours
这应该可以解决您的问题:
\n\nCELERYBEAT_SCHEDULE = {\n \'daily-google-connect\': {\n \'task\': \'app.engine.schedule_fetcher\',\n \'schedule\': crontab(minute=\'0\', hour=\'*/2\'),\n \'args\': ([\'G\'])\n },\n \'daily-facebook-connect\': {\n \'task\': \'app.engine.schedule_fetcher\',\n \'schedule\': crontab(minute=\'0\', hour=\'*/2\'),\n \'args\': ([\'F\'])\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n