【问题标题】:crontab week of the day not working - it send everyday一天中的 crontab 周不工作 - 它每天发送
【发布时间】:2019-07-22 10:01:50
【问题描述】:

我在每个第一个、第三个星期一使用 crontab 发送电子邮件。

我尝试了 MON1 两者,但它每天都有效。

这是我的 crontab - 我都试过了,但都是每天都发送

0 09 1-7,15-21 * MON
0 09 1-7,15-21 * 1

我认为语法没有问题。我能做些什么? 提前致谢。

【问题讨论】:

  • 你用什么工具来处理这个 CRON 表达式?各地的格式/规则不尽相同。
  • @TimBiegeleisen 哦,我在 ubuntu 16.04 中使用 crontab。有版本差异吗?

标签: cron


【解决方案1】:

这是正确的、记录在案的行为。来自 Ubuntu 16.04 上的 man 5 crontab(重点是我的):

注意:命令执行的日期可以由两个字段指定 - 月份和日期 周。 如果两个字段都受限制(即不是 *),则该命令将在任何一个时运行 字段匹配当前时间。例如, 30 4 1,15 * 5 将导致在每个 1 日和 15 日凌晨 4:30 运行命令 月,每周五。但是,可以通过向 命令(参见下面的示例 CRON 文件中的最后一个示例)。

稍后在手册页中,他们给出了一个示例,可以满足您的要求:

   # Run on every second Saturday of the month
   0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

【讨论】:

  • 哦,答案几乎是一样的。谢谢!
  • 顺便说一句,在您的示例 crontab 中,test 是什么?
  • man test。它是实际执行相等性测试的命令(因为被赋予了-eq 选项)。您的示例,如果省略了 test 一词,将无法正常工作。
【解决方案2】:

从我读到的here 来看,范围不能绕到午夜。您可以尝试为每个可能的星期一创建单独的 CRON 作业,例如

0 09 1 * MON
0 09 2 * MON
...
0 09 7 * MON
0 09 15 * MON
0 09 16 * MON
...
0 09 21 * MON

【讨论】:

  • 我在白天使用范围 - 范围不能绕到午夜有关系吗?
  • 我不知道...如果我的答案有效,那么显然是的。如果没有,我很乐意删除它。也可能是它不喜欢多个范围。
  • 哦,你的意思是它同时应用了多个范围......一天中的一天+一周。我会弄清楚更多。谢谢
【解决方案3】:

我在man 5 crontab找到它

注意:命令执行的日期可以由两个字段指定 - 月份的日期和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时,将运行该命令。例如,“30 4 1,15 * 5”将导致命令在每个月的 1 日和 15 日以及每个星期五的凌晨 4:30 运行。但是,可以通过向命令添加测试来获得所需的结果(请参阅下面的示例 CRON 文件中的最后一个示例)。

所以这意味着一天 (1-7,15-21) 和一天中的一周 (MON) 都适用。

如果要指定一天中的星期几,请尝试使用date

0 09 1-7,15-21 * $(date +\%Wu) -eq 1 && my_job

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2015-09-10
    • 2015-09-26
    • 2012-12-07
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多