我试图提出一个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中实现这一目标吗?
答案 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
执行命令,当两天字段中的至少一个时(月份,或星期几)匹配当前时间
将这两者结合起来将在第一个星期一开始工作,每一天从第八个开始。