一个月中特定日期的cron操作



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

他的任务,在7天后(一周(,在这些日期数字的第一分钟:8,15,22,29=>完成任务,但二月除外(原因显而易见(。

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) {
...
}
});

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

非常感谢!

我认为您可以将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((函数(这里是cronapi(打印出下一个,比如说,作业将运行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'
]

最新更新