linux - 如何定义一个 cron 表达式在每个月的第一个星期一执行脚本?

标签 linux bash cron

我有一个这样的脚本:

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

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

最佳答案

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

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

前两项,数字 12,设置分钟和小时。

第三项 1-7 设置该月中某天的允许范围。

第四项,*,是月份,我们允许所有月份匹配。

第五项,*,设置星期几。 此字段与月份中的日期字段进行“或”运算。因此,在此指定星期一是没有用的。如果我们这样做,cronjob 将在该月的前 7 天所有星期一运行。

最后,我们测试 $(date +\%u) -eq 1。仅在星期一返回 True。由于其后面有 &&,您的脚本将仅在该月前 7 天内的星期一执行。

请注意,在 crontab 条目中,% 被视为换行符,除非它被转义。因为我们需要一个文字 %,所以在上面的命令中使用反斜杠对其进行转义。

有关其工作原理的更多信息,请参阅 man 5 crontab

替代方案

正如特瓦尔伯格指出的那样,同样的逻辑反之亦然。我们可以在每个星期一运行 cronjob,然后测试该星期一是否是该月的前 7 天之一:

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

关于linux - 如何定义一个 cron 表达式在每个月的第一个星期一执行脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926476/

相关文章:

Python3.3 - 致命的 Python 错误 : Py_Initialize: Unable to get the locale encoding

java - 由于 header 不正确,Sh 脚本未执行

bash - 如何通过双击在 Linux 上运行脚本

python - 如何使用 bash(或 mac 上的 python)提取文本字符串

node.js - 如何使用nodejs cron作业制作计划报告功能? (aws自动缩放问题)

java - 每 2 或 3 周以及在一周中的选定日期重复一次的 CRON 表达

php - 在 Yii2 中运行一个 cron

linux - anaconda env 的 TensorFlow 问题

c++ - 使用 Codeblocks 和 Cmake Linux 编译 GLFW

linux - 使用 .htaccess 重定向 403 错误