一个永远不会执行的 cron 作业

Posted

技术标签:

【中文标题】一个永远不会执行的 cron 作业【英文标题】:A cron job that will never execute 【发布时间】:2012-01-09 14:12:48 【问题描述】:

有没有办法创建一个完全不运行作业的 cron 表达式?

我想用这个表达方式:

0 0 0 1 1 ? 3099

...这实际上可以完成这项工作,因为它将在 3099 年运行,但是有没有更清洁的方法呢?

【问题讨论】:

不,如果我评论或删除它,我的框架会抛出部署错误。 :-( 这是哪个框架? 你可以给出过去的某一年。 0 0 0 1 1 ? 1970 【参考方案1】:

如果即使在遥远的将来您仍然在寻找强大的东西,请尝试https://***.com/a/13938099/1601531,我建议在不打算执行的 crontab 条目中使用 February 31st。

0 0 5 31 2 ?

【讨论】:

在 Spring Boot 的 cron 解释器上,这会导致 Invalid cron expression "0 0 5 31 2 *" led to runaway search for next trigger 对我不起作用,但 2 月 29 日工作“0 0 0 29 2 ?” 你知道 2 月 29 日会执行几年,对吧? 使用spring boot,你可以用破折号“-”禁用cron作业,***.com/questions/36403671/… Microsoft.Azure.WebJobs.Extensions: The schedule expression '0 0 5 31 2 ?' was not recognized as a valid cron expression or timespan string.【参考方案2】:

我需要一个有效的 cron 计划(? 语法在我的系统中不起作用)来解决实际日期,但要有效地“从不”。我目前最好的解决方案是选择最近的闰年,看看 2 月 29 日是哪一天。 2016 年 2 月 29 日是星期一,因此目前距离下一个 2 月 29 日星期一最远。

0 0 29 2 1 产生接下来的 5 个触发器:

02/29/2044 00:00:00Z
02/29/2072 00:00:00Z
02/29/2112 00:00:00Z
02/29/2140 00:00:00Z
02/29/2168 00:00:00Z

不完美,但它会做。

【讨论】:

请不要这样做。这就是我们最终解决 Y2K 错误的原因。 同意这种方法不应该在生产环境中使用 - 就我的目的而言,生产使用了正常的时间表,但开发/测试环境使用了这种 hack,因此代码从未真正触发过。虽然我认为你与 Y2K 漏洞的比较有点过于戏剧化,不是吗? 很公平,但我认为没有这种洞察力的人来 SO 寻求指导可能不明白为什么或不应该在生产中使用它。至于千年虫……它是由一位或多位开发人员认为千年虫是遥不可及的未来,他们“现在”不必担心它。他们可能也没有,但我们做到了。 ;) 对于 Spring 计划,这会导致 Invalid cron expression "0 0 3 29 2 1" led to runaway search for next trigger 错误消息。不过,最后一项的? 被接受(但每 4 年运行一次)。 这很聪明! :D【参考方案3】:

我为您的问题创建了一个重复的(click here to see),并同意您最初的建议。经过测试,Quartz 似乎永远不会执行年份超过 2300 的 cron 表达式。

【讨论】:

【参考方案4】:

打开您的 crontab 文件并删除条目将是适当的方法。或者您也可以将 cronjob 调用的可执行文件 simlink 到一个空的 shell 脚本。

告诉我们更多关于你的设置,然后我们会看到......

【讨论】:

我直接使用其中一个框架配置文件中的表达式...显然我不能放#符号:-(。如果我这样做我的部署将失败。 对我来说没有多大意义,你能详细说明一下吗? 设置是,我在 xml 文件中使用了一个 cron 表达式,这个 xml 文件将用于我的一个框架中。我没有直接使用 shell 脚本执行 cron 作业。 。这就是我使用 cron 表达式的方式。 似乎您的方法是有效阻止作业执行的唯一方法。如果它需要留在原地,想不出其他方法。【参考方案5】:

注释掉——在前面加上# 符号。非常有用,尤其是如果您担心到 3099 年会忘记您的更改。

另一种可能是让它执行虚拟命令,例如true rm -rf /

【讨论】:

我直接使用其中一个框架配置文件中的表达式...显然我不能放#符号:-(。如果我这样做我的部署将失败 我添加了另一种可能性。也就是说,这不是你的错。 我猜有些人喜欢生活在边缘...rm -rf / 因为rm -rf / 在答案中投反对票

以上是关于一个永远不会执行的 cron 作业的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Jobdispatcher:由于错误而无休止运行的作业永远不会再次安排

Laravel 队列:在主机中永远运行的工作?

MapReduce 作业永远运行

确保 cron 作业不会两次执行相同的作业

SSISDB 和永远在线。如何安排工作?

fetch Promise 永远不会被执行