【问题标题】:cron operation on specific days of the month每月特定日期的 cron 操作
【发布时间】:2021-08-14 11:14:21
【问题描述】:

我想澄清一下我是否为 CRON 任务指定了正确的日期? 堆栈:Next.js/express.js

他的任务,在 7 天(周)之后,在这些日期数字的第一分钟:8、15、22、29 => 完成任务,除了 2 月(原因很明显)。

cron 版本 => "^1.7.0"

我的变种:

import { CronJob } from 'cron';

export const myJob = new CronJob('0 0 8,15,22,29 1,3,4,5,6,7,8,9,10,11,12 * *', async () => {
    const instanceId = process.env['INSTANCE_ID'];
    if (parseInt(instanceId, 10) === 0) {
        ...
    }
});

此外,也许有一种方法可以排除二月,而不是在没有它的情况下编写整个列表?

非常感谢!

【问题讨论】:

    标签: node.js express cron next.js


    【解决方案1】:

    我认为您可以将 Cron 表达式简化为 0 0 8,15,22,29 * *,只要您希望它在 2 月 8 日、15 日和 22 日运行即可。 (以及每个闰年的第 29 日(我假设你会这样做!))

    如果您想完全跳过二月,您可以使用0 0 8,15,22,29 1,3-12 *。我发现 Crontab.guru 对于解析这些表达式非常有用:https://crontab.guru/#0_0_8,15,22,29_1,3-12_*

    在任何情况下,您都可以使用非常方便的 nextDates() 函数(这里:cron api)打印出下一个作业将运行 50 次。

    const myJob = new CronJob('0 0 8,15,22,29 * *', async () => {
        console.log("Cron job running!");
    });
    
    // Print the next 50 dates to the console.
    console.log(myJob.nextDates(50).map(m => m.format("YYYY-MM-DD HH:mm")));
    

    这看起来像:

    [
      '2021-05-29 00:00', '2021-06-08 00:00', '2021-06-15 00:00',
      '2021-06-22 00:00', '2021-06-29 00:00', '2021-07-08 00:00',
      '2021-07-15 00:00', '2021-07-22 00:00', '2021-07-29 00:00',
      '2021-08-08 00:00', '2021-08-15 00:00', '2021-08-22 00:00',
      '2021-08-29 00:00', '2021-09-08 00:00', '2021-09-15 00:00',
      '2021-09-22 00:00', '2021-09-29 00:00', '2021-10-08 00:00',
      '2021-10-15 00:00', '2021-10-22 00:00', '2021-10-29 00:00',
      '2021-11-08 00:00', '2021-11-15 00:00', '2021-11-22 00:00',
      '2021-11-29 00:00', '2021-12-08 00:00', '2021-12-15 00:00',
      '2021-12-22 00:00', '2021-12-29 00:00', '2022-01-08 00:00',
      '2022-01-15 00:00', '2022-01-22 00:00', '2022-01-29 00:00',
      '2022-02-08 00:00', '2022-02-15 00:00', '2022-02-22 00:00',
      '2022-03-08 00:00', '2022-03-15 00:00', '2022-03-22 00:00',
      '2022-03-29 00:00', '2022-04-08 00:00', '2022-04-15 00:00',
      '2022-04-22 00:00', '2022-04-29 00:00', '2022-05-08 00:00',
      '2022-05-15 00:00', '2022-05-22 00:00', '2022-05-29 00:00',
      '2022-06-08 00:00', '2022-06-15 00:00'
    ]
    

    【讨论】:

    • 谢谢。不,问题不在于高年。我只有每周计算一次的大数据来保存中期报告,每个月都不一样。原则上,我也不需要最后一周,二月绝对不需要。
    猜你喜欢
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2021-07-15
    相关资源
    最近更新 更多