【问题标题】:how to run a cron job at a certain frequency starting from a specific date?如何从特定日期开始以特定频率运行 cron 作业?
【发布时间】:2023-03-25 17:55:02
【问题描述】:

我尝试使用 npm 包“cron”和“node-schedule”来完成这项工作,但我做不到。 假设我想在下午 6.30 开始 cron 作业,从下午 6 点开始,我希望它每 2 小时执行一次。 首先是如果它不是一个确切的时间,我无法让它工作,这意味着如果它不是(1PM,2PM,8PM .....) 所以我想它会在下午 6 点整运行,而不是下午 6.30 我试过这种模式: "0 18-23/2 * * *" 应该在 18 点到 23 点之间工作,转义两个小时 [18,20,22,00] 但一旦过了午夜,它就会停止,直到再次到 18 小时。我希望它每 2 小时执行一次(意味着它在凌晨 2 点执行,依此类推……) cron 作业有可能吗?

【问题讨论】:

    标签: node.js cron node-schedule


    【解决方案1】:

    我相信您说的是使用 crontab 来安排作业。

    crontab 旨在让您根据许多事情设置频率,但它并非旨在在特定时间“启用”。

    所以以下将每两个小时运行一次

     0 0,2,4,6,8,10,12,14,16,18,20,22 * * * (command)
    

    假设现在是每月 1 日,您希望它从下午 6 点开始每两小时运行一次 我会做以下事情

     0 18,20,22 1 * * (command)
     0 0,2,4,6,8,10,12,14,16,18,20,22 2 * * (command)
    

    这意味着今天(基于每月的哪一天,它将从 6 点开始运行,明天它将每两个小时运行一次。然后明天的某个时候,我将编辑文件并删除第一行并更改当天的“2”将月份转换为“*”(以匹配我向您展示的第一行)——现在它将始终每两个小时运行一次。

    tldr; 编辑 crontab 工作两天,上线后编辑每天工作。

    【讨论】:

    • 感谢您的回复,我通过创建两个 cron 作业解决了这个问题,在午夜停止第一个作业,并在午夜过后开始第二个作业,每两个小时运行一次。谢谢!
    • @Sarah 也可以——你只需要熬夜到午夜就可以了!
    【解决方案2】:

    您可以编写一个基本的 shell 脚本来检查当前日期和时间是否大于或等于您在执行命令之前指定的日期和时间。 请注意,日期和时间以 UTC 格式指定。这将导致 cron 在整点后每 2 小时 30 分钟运行一次,但直到 UTC 时间 2019 年 12 月 3 日下午 6 点之后才会真正激活。另请注意,日期命令可能因 nix* / BSD / OSX 的不同风格而异。

    30 */2 * * * if [ $(date --utc +%s) -ge $(date --utc --date "2019-12-03T18:00:00" +%s) ]; then (command) fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-14
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 2023-01-05
      • 2020-04-27
      相关资源
      最近更新 更多