我有这样一个剧本:

* * * * * path/to/my/script.sh

我需要定义cron表达式“****”以在每个月的第一个星期一每月运行一次。

最佳答案

本月的第一个星期一是本月前七天内唯一出现的星期一。因此,要在凌晨1:02执行作业,请使用:

2 1 1-7 * * test $(date +\%u) -eq 1 && path/to/my/script.sh

前两项数字12设置分钟和小时。
第三项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/

10-12 22:47