CRON表示除了第一个月之外的所有星期一

时间:2017-09-28 18:50:32

标签: cron quartz-scheduler

我试图提出一个CRON表达式,允许我安排一个石英触发器在一个月的每个星期一运行,除了第一个。

参考文献:

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

0 5 0 ? * 2#1

2#1代表当月的第一个星期一(2 =星期几,1是第n次出现)

但是,如果我尝试做类似

的事情
0 5 0 ? * 2#2-2#5

OR

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

它抱怨消息

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

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

1 个答案:

答案 0 :(得分:0)

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结合起来。根据手册页,这些条件是OR(意味着 将允许作业运行):

  

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

将这两者结合起来将在第一个星期一开始工作,每一天从第八个开始。