安排 cron 工作永远不会发生?

use*_*776 4 cron kubernetes

这是我的 CronJob 规范的一部分:

kind: CronJob
spec:
    schedule: #{service.schedule}
Run Code Online (Sandbox Code Playgroud)

对于特定环境,设置了 cron 作业,但我从不希望它运行。我可以写入一些值schedule:来导致它永远不会运行吗?

我还没有找到所有支持的语法的任何文档,但我希望是这样的:

@never 或者 @InABillionYears

mar*_*rio 9

@reboot不保证永远不会运行该作业。它实际上会在您的系统启动/重新启动时始终运行,并且可能会发生每次重新启动 cron 守护程序时它也会运行,因此您需要依赖系统上的“通常不会发生” ...

有更多特定的方法可以确保CronJob永远不会运行 a:

  1. 在 Kubernetes 级别,通过将其字段设置为暂停作业.spec.suspendtrue

您可以使用补丁轻松设置它:

kubectl patch cronjobs <job-name> -p '{"spec" : {"suspend" : true }}'
Run Code Online (Sandbox Code Playgroud)
  1. 在 Cron 级别。使用基于crontab语法未经过严格验证的事实的技巧,并设置一个您可以确定永远不会发生的日期,例如 2 月 31 日。Cron将接受这一点,因为它不检查字段中day of the month设置的值month。它只需要您在两个字段(1-311-12分别)中输入有效数字。您可以将其设置为:

* * 31 2 *

对于Cron来说,这是完全有效的值,但我们知道这样的日期是不可能的,而且永远不会发生。

  • 不要在 google kubernetes 引擎中执行此操作(2 月 31 日)。它会尝试每分钟左右启动一次 cron,并抱怨时间表。使用“暂停作业”本机功能,只需从 gcloud/console 手动运行即可 (3认同)
  • 这里的版本 1.27 和 cron 表达式产生“无效的计划:** 31 2 *:两个计划之间的时间差小于 1 秒”。使用 `0 0 31 2 *` 可防止出现警告。 (2认同)

swi*_*.op 8

kind: CronJob
spec:
    suspend: true
Run Code Online (Sandbox Code Playgroud)

  • 之前已经在更完整的答案中回答了这个问题...此外,请记住,在此站点上,仅代码答案通常不受欢迎。答案应该解释如下内容:它有什么作用?它是如何做到的?它去哪里?它如何解决OP的问题?请参阅:[如何回答](https://stackoverflow.com/help/how-to-answer)。谢谢! (4认同)
  • 很公平,爱德华多。然而,从个人经验来看,当我想知道如何停止 cron 作业运行时,我想要的只是“spec.suspend=true”。 (3认同)