最近有一个新的任务需要在后台定时进行,于是使用了celery的定时器来实现,但是加了任务后,到设置的时间点时任务就是不会被触发执行。定位了很多地方,最后发现是时间设置有问题。
需求:
早上7点~凌晨12点每30分钟执行一次,于是我将任务定义成了这样
sender.add_periodic_task(
crontab(minute='*/30', hour="7-24"),
sync_module_data_periodic,
name="sync module data",
queue="celery_module_queue",
)
与这个任务一起注册的其它定时任务都可以正常被触发(区别在于其它任务只在指定的几个时间点触发),唯独这个任务不行。定位了很久才发现是hour那里设置错了,应该是7-23,没有24点。。
修改后:
sender.add_periodic_task(
crontab(minute='*/30', hour="7-23"),
sync_module_data_periodic,
name="sync module data",
queue="celery_module_queue",
)
这里再记录一下celery常用的cronrab配置(引自https://blog.csdn.net/zhangfh1990/article/details/77164499):
例子 | 含义 |
---|---|
crontab() | 每分钟执行 |
crontab(minute=0, hour=0) | 每天午夜执行 |
crontab(minute=0, hour=’*/3’) | 每三个小时执行: 午夜, 3am, 6am, 9am, 正午, 3pm, 6pm, 9pm. |
crontab(minute=0,hour=’0,3,6,9,12,15,18,21’) | 同上 |
crontab(minute=’*/15’) | 每15分钟执行 |
crontab(day_of_week=’sunday’) | 星期日每分钟 |
crontab(minute=’‘,hour=’‘, day_of_week=’sun’) | 同上 |
crontab(minute=’*/10’,hour=’3,17,22’, day_of_week=’thu,fri’) | 每10分钟执行,仅限于周六日3-4 am, 5-6 pm, and 10-11 pm |
crontab(minute=0, hour=’/2,/3’) | 偶数小时或者能被3整除的小时数执行 |
crontab(minute=0, hour=’*/5’) | 被5整除的小时数,如3pm |
crontab(minute=0, hour=’*/3,8-17’) | 8am-5pm能被3整除的 |
crontab(0, 0, day_of_month=’2’) | 每月第2天 |
crontab(0, 0,day_of_month=’2-30/3’) | 每偶数天 |
crontab(0, 0,day_of_month=’1-7,15-21’) | 每月1和3周 |
crontab(0, 0, day_of_month=’11’,month_of_year=’5’) | 每年5月11日 |
crontab(0, 0,month_of_year=’*/3’) | 每个季度第1月 |