我需要安排一个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
由于英语不是我的母语,我希望这对你们来说尽可能清楚。
谢谢。
答案 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分钟执行上述命令。并且由于该命令包含第一周的测试,因此它将仅在该月的第一个星期四运行。