【问题标题】:How can I specify time in CRON considering YEAR?考虑到 YEAR,我如何在 CRON 中指定时间?
【发布时间】:2011-12-05 04:13:39
【问题描述】:

我的任务是考虑 YEAR 字段在 CRON 中指定时间。我该怎么做,或者你知道任何可以在我的 linux 服务器上帮助我的东西吗?谢谢

【问题讨论】:

  • 解决方法:每年运行并将年份逻辑移至脚本。就个人而言,我不会真正相信每年运行少于一次的计划任务。太多的事情可能会改变,直到你注意到它跳过了一次运行。
  • 完全同意你的观点,可能会发生太多事情
  • 还有另一个使用 YEAR 的用例:如果你只想执行一次 Job。
  • @CodeFreezr,如果你想一次性运行一个作业,你应该使用at而不是crontab。 at 将执行您的任务一次,与 cron 类似。

标签: linux cron


【解决方案1】:

如前文所述,您不能指定年份字段,但是可以模仿它:

# 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  0  1  1  *   [[ $(date "+\%Y") == 2020 ]] && command1
  0  0  1  1  *   (( $(date "+\%Y") % 3 == 0  )) && command2
  0  0  1  1  *   (( $(date "+\%Y") % 3 == 1  )) && command3

这里,command1 将在 2020-01-01T00:00:00 运行,command2 将在每 3 年的 1 月 1 日午夜运行一次,它将在 2019、2022、2025 等运行。 ... command3command2 相同,但有一年的偏移量,即 2020、2023、2026、...

注意:不要忘记您必须在 crontab 文件中转义 -字符 (%):

“第六”字段(该行的其余部分)指定要运行的命令。行的整个命令部分,直到换行符或 一个“%”字符,将由/bin/sh 或在cronfile 的SHELL 变量中指定的shell 执行。命令中的“%”字符,除非使用反斜杠 (\) 进行转义,否则将更改为换行符,并且第一个 % 之后的所有数据将作为标准输入发送到命令。

来源:man 5 crontab

【讨论】:

  • 可能值得一提的是,我必须加一个反斜杠才能使日期评估工作(在 crontab -e 中;而它直接在 bash 中工作良好):[[ $(date "+\%Y")
  • @Kamafeather 你是对的,你必须在cron中转义%
  • @Kamafeather 不错的评论。将其添加到您的答案中是值得的。谢谢。
【解决方案2】:

Crontab (5) 文件格式没有 YEAR 字段。您可以尝试运行一个 cron 作业 @yearly(在元旦 00:00),它使用 date(1) 查看当前年份并将当前 crontab 文件更新为适合新年的文件。

【讨论】:

  • 但只需要一个功能就可以轻松地重写和转发年份字段值,不幸的是逻辑繁琐
【解决方案3】:

标准cron 不支持年份字段,但值得注意的是,某些实现支持带有第六个year 字段的扩展crontab 格式,例如nnCron。并非每个 cron 都是平等的。

【讨论】:

    【解决方案4】:
    var task = cron.schedule('0 0 1 1 *', () => {
        console.log('Printing this line 1ST JANUARY OF EVERY YEAR in the terminal');
    });
    

    这是考虑 YEAR 字段的工作.. @mart7ini

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2021-06-01
      • 1970-01-01
      • 2021-03-15
      • 2015-04-26
      • 2017-03-01
      • 1970-01-01
      • 2013-01-15
      相关资源
      最近更新 更多