我有这样一个剧本:
* * * * * path/to/my/script.sh
我需要定义cron表达式“****”以在每个月的第一个星期一每月运行一次。
最佳答案
本月的第一个星期一是本月前七天内唯一出现的星期一。因此,要在凌晨1:02执行作业,请使用:
2 1 1-7 * * test $(date +\%u) -eq 1 && path/to/my/script.sh
前两项数字
1
和2
设置分钟和小时。第三项
1-7
设置了一个月中某一天的允许范围。第四项,
*
是月份,我们允许所有月份匹配。第五个项目
*
设置一周中的一天。此字段与“月日”字段一起使用。因此,在这里指定星期一并不有用。如果我们这样做了,这个cronjob将在一个月的前七天和整个星期一运行。最后,我们有
test $(date +\%u) -eq 1
。这只在星期一返回真的。由于随后的&&
,您的脚本将仅在本月前七天发生的星期一执行。注意,在crontab条目中,
%
被视为换行符,除非它被转义。因为我们需要一个文本%
,所以它在上面的命令中用反斜杠转义。有关如何工作的更多信息,请参见
man 5 crontab
。替代方案
正如twalberg所指出的,同样的逻辑反过来运作。我们可以在每个星期一运行cronjob,然后测试该星期一是否在该月的前七天之一:
2 1 * * Mon test $(date +\%e) -le 7 && path/to/my/script.sh
关于linux - 如何定义在每个月的第一个星期一执行脚本的cron表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36926476/