我在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页面