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

标签 linux cron

我需要安排一个 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/

相关文章:

python - 有没有办法确定 Amazon AWS EC2 实例运行了多长时间?

linux - 为同一任务运行多个 cron 作业

linux - mv 命令有 scp 变体吗?

linux - chrt 将进程设置为 SCHED_OTHER 策略失败,错误为 "Invalid argument"

linux - 如何发送包含可执行文件的压缩存档,以便 Google 的附件过滤器不会拒绝它

linux - 我是否需要在 Windows 中使用 Hadoop 来连接在 Linux 上运行的 hbase?

R脚本作为cronjob未执行

linux - kubernetes:Docker请求和分配的内容之间的区别

python - 类似 cron 的循环任务调度程序设计

php - 找到执行 cron 的用户名