最近有乙個新的任務需要在後台定時進行,於是使用了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配置(引自
例子含義
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月
Scheduled 定時任務不生效原因
經過一系列的排查發現,原來是測試過程中,測試先將服務啟動。然後再手動調整伺服器本地時間為22 59 00秒,等23點的時候,看定時任務是否執行。因為,spring的定時器是在服務啟動初始化的時候,便已經指定了下一次定時任務執行的時間,這時候手動去調整本地時間是沒有效果的。我們在檢視 中可以看到,sc...
Celery 定時任務
project celery task celery包 init py 包檔案 celery.py celery連線和配置相關檔案,且名字必須交celery.py tasks.py 任務體函式檔案 注意 任務體 檔案要與celery.py檔案在同乙個包下 beat也是乙個socket,啟動後會根據配...
Celery 定時任務
celery beat是乙個排程程式,它定期啟動任務,然後由集群中的可用工作程式節點執行任務。預設情況下,條目是從 beat schedule 設定中獲取的 但也可以使用自定義儲存,例如將條目儲存在sql資料庫中。必須確保一次只有乙個排程程式針對乙個排程任務執行,否則最終將導致重複的任務。使用集中式...