celery.schedules crontab配置hour='*/1'执行频率异常的咨询
Celery定时任务crontab配置问题解析
问题原因
你配置的crontab(hour='*/1')之所以每分钟执行,是因为Celery的crontab类中,未指定的时间参数会使用默认值*(匹配该字段的所有可能值)。这里你只设置了hour='*/1',而minute参数默认是*,意味着每小时内的每分钟都满足触发条件,所以任务会每分钟执行一次。
正确配置方案
要实现每小时执行一次的需求,必须同时指定minute为固定值(比如0,代表每小时整点执行),修改后的代码如下:
'task-hourly': { 'task': 'task', 'schedule': crontab(minute=0, hour='*/1'), 'options': { 'queue': 'celery-periodic-queue' } }
这样配置后,任务会在每小时的0分(如0:00、1:00、2:00...)执行一次,符合你预期的每小时执行一次的逻辑。
补充说明
Crontab的定时规则是多字段联合匹配的,分、时、日、月、周五个字段必须同时满足条件才会触发任务。任何未显式指定的字段都会默认使用*,即匹配该字段的所有值。比如文档中提到的hour='*/3',如果单独使用同样会导致每3小时内的每分钟都执行,正确的每3小时执行一次配置应为crontab(minute=0, hour='*/3')。
内容的提问来源于stack exchange,提问作者ignacio-varga
相关产品推荐
相关产品推荐

