向nestjs-cron作业添加计数器



我在nestjs中使用@nestjs/schedule和cron作业。我需要以有限的方式执行cron作业,例如三次。我该怎么做?Tnx

┌──────────────第二个(可选(

│ ┌────────────分钟

│ │ ┌──────────小时

│ │ │ ┌────────年月日

│ │ │ │ ┌──────月

│ │ │ │ │ ┌────星期几

│ │ │ │ │ │

│ │ │ │ │ │

*****

假设你想让你的玉米工作在10:45运行,你只需将空间符号从小时和分钟位置替换为如上所示的指示。

cron.schedule('45 10 * * *', () => {
console.log('Running a job');
},
{
scheduled: true,
timezone: "Asia/Karachi"
});

或者假设你想每天在特定的时间运行

cron.schedule('0 10,11,12 * * *', () => {
console.log('Running a job');
},
{
scheduled: true,
timezone: "Asia/Karachi"
});

您可以动态创建作业,并使用注释超时来完成它。

超时注释需要时间来完成任务,因此,您需要计算执行作业的时间集,并乘以所需的执行量。

下面是一个每2秒执行一次且仅执行三次的示例。因此,完成作业的最终时间将是2*3*1000(或6秒(。

请注意,我必须在超时注释中添加1秒,否则中断将在第三个进程上执行,并且只执行两次。

之后,你可以删除作业或停止它。在我的例子中,我决定删除它。


private static time = 2;
private static quantity = 3;
private static limit = TaskService.time * TaskService.quantity;
private nameTask = '### TESTE  3 Times ###';
addCronJon(name: string, seconds: string, limit?: number) {
const job = new CronJob(`*/${seconds} * * * * *`, () => {
this.logger.warn(`time (${seconds} for job ${name} to run!`);
});
this.schedulerRegistry.addCronJob(name, job);
job.start();
this.logger.warn(
`job ${name} added for each minute at ${seconds} seconds!`,
);
}

threeTimes() {
this.addCronJon(
this.nameTask,
TaskService.time.toString(),
TaskService.quantity,
);
}
@Timeout(TaskService.limit * 1000 + 1000)
threeTimesTimeout() {
this.schedulerRegistry.deleteCronJob(this.nameTask);
this.logger.warn(`job ${this.nameTask} deleted!`);
}

你可以在这里看到完整的代码。

你可以在这里访问关于cron作业的nestjs页面

最新更新