【问题标题】:Cron not working with minutesCron 无法使用分钟
【发布时间】:2011-09-29 14:00:24
【问题描述】:

(更新:显然 cron 作业没有秒数。但是,我现在的问题是:是什么解释了 cron 的这种行为?谢谢)

我有两个 cron 触发器,一个应该在另一个之前出现。

首先我让任务 1 每 59 秒进入一次

*/59 * * * * ?

任务 2 每 59 秒进入一次,但有 15 秒的偏移。

15/59 * * * * ?

这很好用。没什么好抱怨的。现在我只想将这些值移到分钟列。这一次,只有一分钟的偏移量,可以忽略不计,因为任务每 59 分钟重复一次。

任务 1

* */59 * * * ?

任务 2

* 1/59 * * * ?

突然间,task 1 一直在触发,而task 2 根本不触发。上述变化似乎是唯一影响这一点的因素。

【问题讨论】:

  • 更具体地说,任务 1 将数据库中列的所有条目清除为 0。任务 2 选择一个随机行并将该行的列更改为 1。因此,“1”每小时移动一次行到行,而所有其他都归零。
  • 你用 Spring 标记了这个问题:你说的是真正的玉米还是 Springs @Schedule 注释。区别是重要的 spring 有秒,cron 没有!

标签: java spring cron


【解决方案1】:

* */59 * * * 表示当前小时内每分钟运行一次(第一个 * 是分钟),然后等待 59 小时再次运行。

* 1/59 * * * 表示在第一个小时内每分钟运行一次(您不在,因此任务 2 永远不会触发),然后在 50 小时后的一小时内每分钟运行一次。

我认为问题仍然是秒/分钟混乱。

编辑:请注意,某些版本的 Cron 不接受 '/' 前的数字...它必须是一个范围。因此,对于您的用例,我将使用 */59 * * * *1-59/59 * * * *

【讨论】:

  • 我明白了。是的,我一直认为第一个 * 是分钟,但由于它的行为,我只假设它是秒。
  • 无论如何,我还读到 */5 * * * * 是“每 5 分钟运行一次”的简写,你会如何在几个小时内做到这一点,比如每三个小时一次,* */3 * * *,对吧?
  • @ajko 对,*/3 是每 3 小时一次。在此处向下滚动到“Cron 表达式”以阅读:en.wikipedia.org/wiki/Cron
  • 刚刚看到您的编辑。所以这将每 59 分钟执行一次,对吗?我会试一试。谢谢。
  • 维基百科来救援。好的,所以在您的示例中, */59 中的 * 表示每分钟值(1-59)执行。那么 59 表示在此期间等待 59 分钟再重复一次?
【解决方案2】:

因为没有

*    *    *    *    *  command to be executed
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    │
│    │    │    │    └───── day of week (0 - 7) (Sunday=0 or 7)
│    │    │    └────────── month (1 - 12)
│    │    └─────────────── day of month (1 - 31)
│    └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)

http://en.wikipedia.org/wiki/Cron

【讨论】:

  • 是的,我也对此感到困惑,但事实上,当我在每个人都告诉我的分钟列中看到它时,它是在 59 秒时触发的。我想通了?与它有关。
  • 但是假设这对于标准的 cron 格式也不例外,那么如何解释它的行为方式呢? (感谢您的帮助。)
  • */59 将扩展到 0-59/59 ...我怀疑四舍五入后的每一分钟。我挑战你让 cron 每分钟不止一次运行你的进程:)
  • 不,我相信你的话,甚至有人问如何让他们的 cron 每 20 秒运行一次(为什么?)当然,每个人都说没有秒数。我只是问,因为它的行为方式是这样的:)
猜你喜欢
  • 2021-03-15
  • 2017-10-15
  • 2014-08-07
  • 2012-04-14
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多