cronjob 定时 - 每 3 个月一次

cronjob 定时 - 每 3 个月一次

我偶然发现了这个例子:

0 9 1-7 * 1 *                       First Monday of each month, at 9a.m.
  1. 我不确定1-7应该是每个月的日期的部分。为什么是a1-7而不是a *

  2. 如何编写一个每 3 个月 0000 点运行的 cronjob?

    0 0 1 */3 * *
    

以上是否正确?

答案1

#* * * * * command to be executed
#- - - - -
#| | | | |
#| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
#| | | ------- Month (1 - 12)
#| | --------- Day of month (1 - 31)
#| ----------- Hour (0 - 23)
#------------- Minute (0 - 59)

你的是正确的。五个星号之后,必须有一个 shell 命令。

您可以通过执行 来确认 cron 选项卡是否正在运行tail -f /var/log/syslog | grep CRON。出于测试目的,您可以使用n几分钟。

答案2

0 9 1-7 * *每天(9:00)运行该作业一次,但仅在该月的前 7 天运行。这是在该月的第一个星期一运行作业的一种方法:在前 7 天运行它,但除非那天是星期一,否则不执行任何操作。

0 9 1-7 * *  if [ "$(date +%u)" = 1 ]; then do_stuff; fi

0 9 * 1 *每个星期一运行该作业。这是在该月的第一个星期一运行作业的另一种方式:每个星期一运行它,但除非是在该月的前 7 天内,否则不要执行任何操作。

0 9 * * 1  if [ "$(date +%_d)" -le 7 ]; then do_stuff; fi

0 9 1-7 * 1 *看起来像是某种将这两种方法结合起来的失败尝试。请注意,0 9 1-7 * 1每周一运行该作业该月前 7 天的每一天。

至于0 0 1 */3 *(你在最后多加了一个*),它会在每个月的第一天午夜运行一个作业,但前提是该月是 3 的倍数。这确实是每三个月执行一次。

答案3

请注意,“第3个月“ 和 ”每 3 个月一次第一个是指从一年的第一个月开始每三个月。例如,以2021-11-01 00:00:00为起始点,我们有:

  • 下一次 2021-04-01 00:00:00
  • 然后在 2021-07-01 00:00:00
  • 然后在 2021-10-01 00:00:00
  • 然后在 2021-01-01 00:00:00

为了实现这一点,语法应该0 0 1 */3 * *按照您的建议。看一下这个这里

另一个是指考虑当前的 3 个月。例如,如果我们以 2021-11-01 00:00:00 作为起始点,我们有:

  • 下一次 2022-02-01 00:00:00
  • 然后在 2022-05-01 00:00:00
  • 然后在 2022-8-01 00:00:00
  • 然后在 2022-11-01 00:00:00

要实现这一点,语法0 0 1 2-12/3 * *如您所建议的那样。你可以看看这个这里

请注意,您必须计算“的数量”每个月你想要” ,并从这个数字开始到一年中的最后一个(12月)。在前面的例子中,起始月份是11月(11月),如果我们计算未来3个月,我们将获得第 2 个月(明年 2 月)。

相关内容