如何在每个月的第一个星期四计划cron

时间:2019-10-16 12:27:30

标签: linux cron

我需要安排一个cron作业在每个月的第一个星期四3:00 PM进行。我怎样才能做到这一点? 我已经阅读了与此类似的另一个主题,但这是每个月的第一个星期日。我如何修改它以满足我的需求?请不要让我参考任何手册,因为它们对我没有帮助。这就是为什么我在这里问这个问题。

每个月的每个第一个星期日

00 09 * * 7 [ $(date +\%d) -le 07 ] && /run/your/script

这里应该做一个简单的答案,我只是不知道-le 07代表什么。

所以4是星期四,cron中的-le 07是什么?

它是该月的第7天(星期日)的支票吗?

00 15 * * 4 [ $(date +\%d) -le 07 ] && /run/your/script

或者应该是这个吗?

假设这是该月的第4天(星期四)的支票?

00 15 * * 4 [ $(date +\%d) -le 04 ] && /run/your/script

由于英语不是我的母语,我希望这对你们来说尽可能清楚。

谢谢。

1 个答案:

答案 0 :(得分:2)

答案:

0 15 * * 4 [ $(date +\%d) -le 7 ] && command

说明:

首先,您需要认识到,每月的第一个星期四始终是{1,2,3,4,5,6,7}集中的某天。那仅仅是因为一周只有7天。因此,第一个星期四的日数不能大于7。显然,其他任何工作日(例如星期二或星期六)也是如此。

cron将执行的命令由两部分组成:

  • [ $(date "+\%d") -le 7 ]:这是一个简单的测试,它检查月份中的一天是否小于7。它实际上是检查我们是否在月份的第一周内。命令date -d "+%d"以两位数字(01,02,03,...,31)返回一个月中的日期,它是一个字符串。 test命令(这里用方括号[ ... ]用另一种形式编写)会检查从date来的整数是否小于或等于7。在终端中输入man test时会显示此内容。

  • command:如果先前的test成功,将执行此命令。即如果我们在每月的第一周。仅在test命令成功的情况下执行此操作的原因是由于&&。格式为cmd1 && cmd2的命令将执行cmd1,只有该命令成功后,才会执行cmd2

因此,由于有了命令,因此现在可以构建crontab文件。还有一点注释(部分以#开头,您可以这样写:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed
  0  15 *  *  4   [ $(date +\%d) -le 07 ] && command

以上表示,在任何星期四的第15小时的第0分钟执行上述命令。并且由于该命令包含第一周的测试,因此它将仅在该月的第一个星期四运行。