概念

Kubernetes v1.12 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。

Edit This Page

CronJob

Cron Job 创建基于时间调度的 Jobs

一个 CronJob 对象就像 crontab (cron table) 文件中的一行。它用 Cron 格式进行编写,并周期性的在给定的调度时间执行 Job。

Note:

所有 CronJobschedule: 时间都是用 UTC 表示。

有关创建和使用 CronJob 的说明及规范文件的示例,请参见 使用 CronJob 运行自动任务

CronJob 限制

CronJob 创建 Job 对象,每个 Job 的执行次数大约为一次。 我们之所以说 “大约”,是因为在某些情况下,可能会创建两个 Job,或者不会创建任何 Job。 我们试图使这些情况尽量少发生,但不能完全杜绝。因此,Job 应该是 _幂等的_。

如果 startingDeadlineSeconds 设置为很大的数值或未设置(默认),并且 concurrencyPolicy 设置为 Allow,则作业将始终至少运行一次。

对于每个 CronJob,CronJob 控制器检查从上一次调度的时间点到现在所错过了调度次数。如果错过的调度次数超过 100 次,那么它就不会启动这个任务,并记录这个错误:

Cannot determine if job needs to be started. Too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew.

需要注意的是,如果设置 startingDeadlineSeconds 字段非空,则控制器会统计从 startingDeadlineSeconds 的值到现在而不是从上一个计划时间到现在错过了多少次 Job。例如,如果 startingDeadlineSeconds200,则控制器会统计在过去 200 秒中错过了多少次 Job。

如果未能在调度时间内创建 CronJob,则计为错过。例如,如果 concurrencyPolicy 被设置为 Forbid,并且当前有一个调度仍在运行的情况下,试图调度的 CronJob 将被计算为错过。

例如,假设一个 CronJob 被设置为08:30:00 准时开始,它的 startingDeadlineSeconds 属性被设置为10,如果在08:29:00 时将 CronJob 控制器的时间改为 08:42:00,Job 将不会启动。 如果觉得晚些开始比没有启动好,那请设置一个较长的 startingDeadlineSeconds

CronJob 只负责创建与其时间表相匹配的 Job,相应的 Job 又会负责管理它所代表的Pod。

反馈