linux 如何在每个月的第一个星期四安排一个cron

yqlxgs2m  于 2023-06-05  发布在  Linux
关注(0)|答案(3)|浏览(309)

我需要安排一个cron作业在每个月的第一个星期四下午3:00运行。我该怎么做?我读过另一个类似的主题,但它是为每个月的第一个星期天。我如何修改它以满足我的需要?请不要让我参考任何手册,因为它们对我没有帮助。这就是为什么我在这里问这个问题。
每个月的第一个星期日

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
或者应该是这一个?
假设这是一张本月第一个第四天(星期四)的支票?
00 15 * * 4 [ $(date +\%d) -le 04 ] && /run/your/script
由于英语不是我的母语,我希望这是尽可能清楚的,你们。
先谢谢你了。

ilmyapht

ilmyapht1#

答案:

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分钟执行上述命令。由于该命令包含第一周的测试,因此它将只在该月的第一个星期四运行。

prdp8dxp

prdp8dxp2#

为什么不简单地用途:

# 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  1-7  *  4   command

所以你告诉cron在月的前7天,第4天(星期四)的第0分钟,第15小时运行。它肯定只包括一个星期四,第一个星期四,因为在一个月的连续7天中,肯定只有一个星期四,而在连续7天中,不可能有两个星期四。

2wnc66cl

2wnc66cl3#

你可以在每个月的第二个星期四这样做:
0 14 /15,/16,/17,/18,/19,/20,*/21 * 周四
“每月15日、16日、17日、18日、19日、20日、21日(如果是周四)的14:00。”

相关问题