閱讀492 返回首頁    go 阿裏雲 go 技術社區[雲棲]


定時任務__應用管理_用戶指南_容器服務-阿裏雲

定時任務是常見需求。普遍的做法是,選擇一台或幾台機器,通過 crontab 實現定時任務。但是對於大規模或大量的定時任務,這種做法的缺點非常多,比如:

  • 可靠性低,一台機器宕機,該機器上的定時任務就無法執行了。
  • 沒有調度功能,機器之間的負載可能不均衡。
  • 沒有重試機製,任務可能運行失敗。
  • 無法運行大規模分布式任務。

容器服務在離線任務的基礎上,增加了定時任務的功能,通過簡單的描述,解決了上述問題。關於離線任務的詳細信息,參見 運行離線任務

注意:隻有10月25號之後升級了 Agent 版本或新創建的集群才能使用該功能。

基於 Docker Compose 的定時任務描述

同離線任務一樣,定時任務也是基於 Docker Compose 的,您隻需要在應用模板裏添加 aliyun.schedule 標簽即可實現定時功能。如下麵的例子所示。

  1. version: "2"
  2. labels:
  3. aliyun.project_type: "batch"
  4. aliyun.schedule: "0-59/30 * * * * *"
  5. services:
  6. s1:
  7. image: registry.aliyuncs.com/jimmycmh/busybox:latest
  8. labels:
  9. aliyun.scale: "5"
  10. aliyun.retry_count: "3"
  11. aliyun.remove_containers: "remove-all"
  12. command: date

其中aliyun.schedule: "0-59/30 * * * * *"表示每 30 秒執行一次該任務;schedule 的格式和 crontab 完全相同(但要注意 schedule 的格式為 秒 分 時 天 月 星期,比 Linux 上的 crontab 多了秒這一項),使用的時間為北京時間。

因為定時功能隻適用於離線任務,所以隻要您添加了 aliyun.schedule 標簽,係統會自動添加 aliyun.project_type: "batch" 標簽,因此上述例子中的 aliyun.project_type: "batch" 可以省略。

另外,離線任務中所有的功能,在定時任務中依然可用,比如 scaleretry_countremove_containers 等。有關標簽的具體含義,參見 運行離線任務

執行過程

定時任務被創建後,應用處於“等待”狀態。當任務指定的時間到達時,任務會被啟動運行,其後的狀態變化和離線應用相同;下一個執行時間到達時,應用狀態會重複這一過程。

同一個定時任務同一時刻隻會有一個實例在執行,如果任務的執行時間大於其執行周期(比如上述任務的執行時間大於 30 秒),則下一次執行會進入執行隊列;如果執行隊列長度大於 3,則會丟棄該次執行。

您可以在應用詳情頁麵單擊 運行曆史 查看運行曆史及結果,如下圖所示。運行曆史列表隻保留最後 10 次的運行曆史。

定時任務運行曆史

高可用性

定時任務控製器采用主-從備模式。主控製器故障時,控製功能將切換至備用控製器。

如果任務的執行時刻正好在主從切換期間,則會延遲至切換完成後執行。如果主從切換期間同一個任務有多次執行,切換完成後隻會執行一次;因此,為了保證任務不丟失,請不要設計重複周期小於一分鍾的任務。

最後更新:2016-11-23 16:04:20

  上一篇:go 運行離線任務__應用管理_用戶指南_容器服務-阿裏雲
  下一篇:go 係統默認應用列表__應用管理_用戶指南_容器服務-阿裏雲