当前位置: 首页 > 知识库问答 >
问题:

一个月内所有星期一(第一个星期一除外)的CRON表达式

凌修伟
2023-03-14

我正在尝试提出一个CRON表达式,它允许我在一个月内的每个星期一运行一个石英触发器,第一个除外。

参考文献:

  • http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html
  • https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

CRON允许您轻松指定一周中某天的第n次出现。这个月的第一个星期一的表达式是:

0 5 0 ? * 2#1

其中2#1表示一个月的第一个星期一(2=一周中的一天,1是第n次出现)

然而,如果我尝试做类似的事情

0 5 0 ? * 2#2-2#5

0 5 0 ? * 2#2,2#3,2#4,2#5

它抱怨信息

 Support for specifying multiple "nth" days is not implemented.

有人知道如何在CRON中实现这一点吗?

共有1个答案

高修筠
2023-03-14

如果cron没有给你想要的表达能力(a),将命令本身更改为仅在特定条件下执行是很简单的事情。

对于您的特殊情况,您知道一个月的第一个星期一介于第一个和第七个星期一之间,随后的星期一必须在第八个或更晚。

因此,使用cron选择所有周一,但稍微修改命令以排除当月的第一个周一:

# mm hh dom mon dow command
   0  1   *   *   1 [[ $(date +%u) -gt 7 ]] && doSomething

该作业将在每周一凌晨1点运行,但实际有效负载doSomething仅在月日大于7时执行。

有些人经常选择将测试放入脚本本身(假设它甚至是一个脚本),但我不太喜欢这样,更喜欢将所有调度信息保留在crontab文件本身中。

(a)不要误以为你可以将一周中的某一天1和一个月中的某一天8-31结合起来来完成这项工作。根据手册页,这些条件为或(表示允许作业运行):

当分钟、小时和月份字段与当前时间匹配,并且两天字段(月日或星期日)中至少有一个与当前时间匹配时,cron执行命令

将这两项工作结合起来,将在第一个星期一以及从第八个星期一开始的每一天执行这项工作。

 类似资料:
  • 问题内容: 我想获取特定月份/年份中第一个星期一的日期。 我有的: 我基本上有两个int变量,一个代表年份,一个代表月份。 我想要的是: 我想知道本月的第一个星期一,最好是一个int或Integer值。 例如: 我有2014年和1月(1月),这个月的第一个星期一是6号,所以我想返回6。 问题: 我以为可以做到这一点,但是在设置日历(仅提供年和月)时已经遇到了麻烦。此外,我不确定如何使用返回实际的月

  • 我想知道特定月份/年份的第一个星期一的日期。 我所拥有的: 我基本上有两个int变量,一个代表年份,一个代表月份。 我想要的是: 我想知道这个月的第一个星期一,最好是整数或整数值。 例如: 我有2014年和1月,这个月的第一个星期一是6号,所以我想返回6号。 问题: 我原以为我可以用做到这一点,但我在设置日历时遇到了问题,因为只有年份和月份可用。此外,我不知道如何使用返回月份/年份的第一个星期一。

  • 我使用石英调度和Spring Batch,我需要在每个月的最后一个星期四运行一个特定的工作。 有可能创建这样的Quartz cron表达式吗? 谢谢

  • 问题内容: python是否提供一种轻松获取 每月 当前星期(1:4)的方法? 问题答案: 为了使用直接除法,您需要根据当月第一天的位置(星期内)来调整您要查看的日期的星期几。因此,如果您的月份恰好在星期一(一周的第一天)开始,则可以按照上面的建议进行除法。但是,如果该月从星期三开始,则需要加2,然后进行除法。这些都封装在下面的函数中。

  • 问题内容: 我正在尝试编写这样的日历功能 是整数(1、2、3 …),$ day是一天(Sun,Mon,…)或数字,以较容易的一个为准。方向有些混乱,因为它进行了不同的计算。 举个例子 它使用默认值,并获得5月的第一个星期日,即2009-05-03。如果我们打电话 ,它将返回5月的第二个最后一个星期日,即2009-05-24。 问题答案: 也许可以使其更快。。。 代码非常有趣。 请注意,前进1表示反

  • 我试图弄清楚如何确定特定的星期一是给定月份的第一个、第二个、第三个还是第四个星期一。我已经弄清楚了如何使用LocalDate类获取下一个星期一和月中的一周。 在上面的例子中,代码获取下一个星期一及其所在的星期。星期是二月的第二周,但那个星期一不是第二个星期一,而是第一个星期一。如果您有任何帮助,我们将不胜感激。