Celery 每分钟都会击败运行任务,即使它设置为每两个小时一次

mag*_*noz 8 celery celerybeat

我正在尝试使用 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\n
from celery.schedules import crontab\n\nstr(crontab(hour=\'*/2\'))\n\'<crontab: * */2 * * * (m/h/d/dM/MY)>\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

\xe2\x80\x9e每两小时\xe2\x80\x9c 的正确 crontab 是:0 */2 * * *

\n\n

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

\n\n

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

\n\n
CELERYBEAT_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}\n
Run Code Online (Sandbox Code Playgroud)\n