【问题标题】:Cron expression for a time range时间范围的 Cron 表达式
【发布时间】:2011-03-17 22:59:51
【问题描述】:

我正在使用 Quartz.Net 在我的应用程序中安排我的作业。我只是想知道是否可以构建以下场景的 CRON 表达式:

凌晨 2:15 到 5:20 之间的每一秒

【问题讨论】:

  • 我不相信 cron 支持秒。最小的时间面额是分钟,虽然理论上你可以用 sleep 1, 2, 3... 来做。此外,cron 具有最大数量的作业,因此如果您的进程没有在可管理的时间内结束,新作业将无法启动。
  • 好的。非常感谢您的支持。

标签: cron quartz-scheduler


【解决方案1】:

罗比,

非常感谢您的回答。对于如此延迟的回复,我深表歉意。我实际上已经离开了一段时间。您的解决方案确实有效。我必须在我指定的时间范围内创建 3 个 CRON 触发器。您提到的时间范围是正确的。但是,对于您提到的 3 CRON 表达式。恐怕它们可能无法按预期工作。这些表达式适用于以下时间范围:2:15AM - 5:20AM - 每天

1) * 15-59 2 * * ? - 从凌晨 2:15 到凌晨 3:00 的每一秒,即凌晨 2:15:00 到凌晨 2:59:59

2) * 0-59 3-4 * * ? - 从凌晨 3:00 到凌晨 5:00 的每一秒,即凌晨 3:00:00 到凌晨 4:59:59

3) * 0-19 5 * * ? - 从早上 5:00 到早上 5:20 的每一秒,即早上 5:00:00 到早上 5:19:59

@gauteh : 请注意 Quartz .Net 实际上支持二次触发。

希望这对可能需要解决类似问题的其他人有所帮助。

【讨论】:

    【解决方案2】:

    关于 cron 秒支持,UNIX cron toolCRON Expression 之间使用的语法似乎有所不同。但是,根据Quartz CRON Documentation,支持秒。

    鉴于上述情况,我将创建三个 CRON 触发器来处理:

    1. 2:15:00 - 2:59:59
    2. 3:00:00 - 4:59:59
    3. 5:00:00 - 5:19:59

    这会转化为(我相信):

    1. * 15/1 2 * * ?
    2. * * 3-5 * * ?
    3. * 0-20 5 * * ?

    【讨论】:

    • 这将是所有月份的第二个 15-59 小时的每一分钟:p,通常不支持秒。如果您将表达式向左移动,它应该可以工作。
    • 我听到你在说什么,但是在 Quartz 和 Quartz.NET 的上下文中,字段是秒、分钟、小时、月日、月、周和年份(可选)。
    【解决方案3】:

    您在这里有一个间隔触发器(每秒),它可以干净地转换为 SimpleTrigger。你需要的是一个限制,只允许它在特定的时间范围内(2:15 - 5:20)运行。这可以通过使用日历来实现,更准确地说是 DailyCalendar。您可以将每日日历设置为具有此时间范围,并将 InvertTimeRange 设置为 true 以包含该范围,而不是默认排除该范围。

    the tutorialDailyCalendar API documentation 中阅读有关日历的更多信息。

    【讨论】:

    • Marko,感谢您指出使用日历的方向。真的很有帮助……
    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多