我需要安排一个 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
还是应该是这个?
假设这是本月第 4 天(星期四)的支票?
00 15 * * 4 [ $(date +\%d) -le 04 ] &&/run/your/script
由于英语不是我的母语,所以我希望你们尽可能清楚这一点。
提前致谢。
最佳答案
答案:
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
是将要执行的命令是成功的。 IE。如果我们在本月的第一周。这将仅在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分钟执行上面的命令。由于该命令包含第一周的测试,因此它只会在该月的第一个星期四运行。
关于linux - 如何在每个月的第一个星期四安排一个 cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58413332/