跳转到内容

定时工作

并非所有工作都会持续运行。迁移运行一次就完成;导入每月运行一次就完成。将这些描述为长时间运行的部署意味着平台会在它们成功时重新启动它们,这恰恰是错误的。

计划工作带来了自身的问题,而每个问题都有一个看似合理的错误答案:当之前的运行仍在进行时触发发生了什么;当平台宕机而错过了一个触发时会发生什么;以及当没有指定时,计划按什么时区读取。

会完成的工作是一种不同的东西。 一个 job 会运行到完成,在您设置的限制内重试,可能受截止时间限制,并且其记录会保留您选择的一段时间。当它成功时不会重新启动。这些字段在 job 参考文档中。

一个计划拥有一个 job 并重新运行它。 每次触发都是同名 job 的下一次运行,而不是每次触发一个新 job。Kubernetes 的做法恰恰相反,这种差异是有意的:每次触发都有一个新名称会赋予每次运行相同的运行编号,并将保留期限分散在无限多的名称上。

每个歧义都在描述中得到解答,而不是继承。 时区是明确声明的,而不是取自进程碰巧运行的环境。重叠触发发生时的处理是您选择的策略。错过的触发可以延迟多久仍然启动是您设置的一个窗口,并提供明确的方式来表示“永不追赶”。

挂起是一项一等公民工具,而非权宜之计。 挂起的调度不会执行任何操作,这使其可以在任何时候安全应用——包括在运行过程中——并且无需修改调度、任务或其历史记录即可撤销。

Not this

本页不涵盖 cron 语法、并发策略名称、保留期限或有意拒绝。这些内容生成在 cronjob 参考文档中。

它也不涵盖长时间运行的工作,这些是 部署和容器。

Odysseus 仪表板中的定时任务屏幕,列出了每个循环任务及其计划和上次运行时间——这是平台按计划而非按请求启动的工作。