我需要安排一个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
由于英语不是我的母语,我希望这是尽可能清楚的,你们。
先谢谢你了。
3条答案
按热度按时间ilmyapht1#
答案:
说明:
首先,你需要意识到每月的第一个星期四总是有一天在
{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文件了。再加上一些注解(以
#
开头的部分),您可以将其写成:上述意思是,在任何星期四的第15小时的0分钟执行上述命令。由于该命令包含第一周的测试,因此它将只在该月的第一个星期四运行。
prdp8dxp2#
为什么不简单地用途:
所以你告诉cron在月的前7天,第4天(星期四)的第0分钟,第15小时运行。它肯定只包括一个星期四,第一个星期四,因为在一个月的连续7天中,肯定只有一个星期四,而在连续7天中,不可能有两个星期四。
2wnc66cl3#
你可以在每个月的第二个星期四这样做:
0 14 /15,/16,/17,/18,/19,/20,*/21 * 周四
“每月15日、16日、17日、18日、19日、20日、21日(如果是周四)的14:00。”