Product
Introducing SSO
Streamline your login process and enhance security by enabling Single Sign-On (SSO) on the Socket platform, now available for all customers on the Enterprise plan, supporting 20+ identity providers.
nest-schedule
Advanced tools
Readme
This is a Nest module for using decorator schedule jobs.
$ npm i --save nest-schedule
import { Module } from '@nestjs/common';
import { ScheduleModule } from 'nest-schedule';
@Module({
imports: [
ScheduleModule.register(),
]
})
export class AppModule {
}
import { Injectable } from '@nestjs/common';
import { Cron, Interval, Timeout, NestSchedule } from 'nest-schedule';
@Injectable() // Only support SINGLETON scope
export class ScheduleService extends NestSchedule {
@Cron('0 0 2 * *', {
startTime: new Date(),
endTime: new Date(new Date().getTime() + 24 * 60 * 60 * 1000),
})
async cronJob() {
console.log('executing cron job');
}
@Timeout(5000)
onceJob() {
console.log('executing once job');
}
@Interval(2000)
intervalJob() {
console.log('executing interval job');
// if you want to cancel the job, you should return true;
return true;
}
}
import { Injectable } from '@nestjs/common';
import { InjectSchedule, Schedule } from 'nest-schedule';
@Injectable()
export class ScheduleService {
constructor(
@InjectSchedule() private readonly schedule: Schedule,
) {
}
createJob() {
// schedule a 2s interval job
this.schedule.scheduleIntervalJob('my-job', 2000, () => {
console.log('executing interval job');
});
}
cancelJob() {
this.schedule.cancelJob('my-job');
}
}
import { Injectable } from '@nestjs/common';
import { Cron, NestDistributedSchedule } from 'nest-schedule';
@Injectable()
export class ScheduleService extends NestDistributedSchedule {
constructor() {
super();
}
async tryLock(method: string) {
if (lockFail) {
return false;
}
return () => {
// Release here.
}
}
@Cron('0 0 4 * *')
async cronJob() {
console.log('executing cron job');
}
}
import { ILocker, IScheduleConfig, InjectSchedule, Schedule } from 'nest-schedule';
import { Injectable } from '@nestjs/common';
// If use NestCloud, it supports dependency injection.
@Injectable()
export class MyLocker implements ILocker {
private key: string;
private config: IScheduleConfig;
constructor(
@InjectSchedule() private readonly schedule: Schedule,
) {
}
init(key: string, config: IScheduleConfig): void {
this.key = key;
this.config = config;
console.log('init my locker: ', key, config);
}
release(): any {
console.log('release my locker');
}
tryLock(): Promise<boolean> | boolean {
console.log('apply my locker');
return true;
}
}
import { Injectable } from '@nestjs/common';
import { Cron, NestSchedule, UseLocker } from 'nest-schedule';
import { MyLocker } from './my.locker';
@Injectable()
export class ScheduleService extends NestSchedule {
@Cron('0 0 4 * *')
@UseLocker(MyLocker)
async cronJob() {
console.log('executing cron job');
}
}
Register schedule module.
field | type | required | description |
---|---|---|---|
config.enable | boolean | false | default is true, when false, the job will not execute |
config.maxRetry | number | false | the max retry count, default is -1 not retry |
config.retryInterval | number | false | the retry interval, default is 5000 |
config.waiting | boolean | false | the scheduler will not schedule job when this job is running, if waiting is true |
Schedule a cron job.
field | type | required | description |
---|---|---|---|
key | string | true | The unique job key |
cron | string | true | The cron expression |
callback | () => Promise<boolean> | boolean | If return true in callback function, the schedule will cancel this job immediately |
config.startTime | Date | false | The start time of this job |
config.endTime | Date | false | The end time of this job |
config.enable | boolean | false | default is true, when false, the job will not execute |
config.maxRetry | number | false | the max retry count, default is -1 not retry |
config.retryInterval | number | false | the retry interval, default is 5000 |
config.waiting | boolean | false | the scheduler will not schedule job when this job is running, if waiting is true |
config.immediate | boolean | false | running job immediately |
Schedule a interval job.
field | type | required | description |
---|---|---|---|
key | string | true | The unique job key |
interval | number | true | milliseconds |
callback | () => Promise<boolean> | boolean | If return true in callback function, the schedule will cancel this job immediately |
config.enable | boolean | false | default is true, when false, the job will not execute |
config.maxRetry | number | false | the max retry count, default is -1 not retry |
config.retryInterval | number | false | the retry interval, default is 5000 |
config.waiting | boolean | false | the scheduler will not schedule job when this job is running, if waiting is true |
config.immediate | boolean | false | running job immediately |
Schedule a timeout job.
field | type | required | description |
---|---|---|---|
key | string | true | The unique job key |
timeout | number | true | milliseconds |
callback | () => Promise<boolean> | boolean | If return true in callback function, the schedule will cancel this job immediately |
config.enable | boolean | false | default is true, when false, the job will not execute |
config.maxRetry | number | false | the max retry count, default is -1 not retry |
config.retryInterval | number | false | the retry interval, default is 5000 |
config.immediate | boolean | false | running job immediately |
Cancel job.
Schedule a cron job.
field | type | required | description |
---|---|---|---|
expression | string | true | the cron expression |
config.key | string | false | The unique job key |
config.startTime | Date | false | the job's start time |
config.endTime | Date | false | the job's end time |
config.enable | boolean | false | default is true, when false, the job will not execute |
config.maxRetry | number | false | the max retry count, default is -1 not retry |
config.retryInterval | number | false | the retry interval, default is 5000 |
config.waiting | boolean | false | the scheduler will not schedule job when this job is running, if waiting is true |
config.immediate | boolean | false | running job immediately |
Schedule a interval job.
field | type | required | description |
---|---|---|---|
milliseconds | number | true | milliseconds |
config.key | string | false | The unique job key |
config.enable | boolean | false | default is true, when false, the job will not execute |
config.maxRetry | number | false | the max retry count, default is -1 not retry |
config.retryInterval | number | false | the retry interval, default is 5000 |
config.waiting | boolean | false | the scheduler will not schedule job when this job is running, if waiting is true |
config.immediate | boolean | false | running job immediately |
Schedule a timeout job.
field | type | required | description |
---|---|---|---|
milliseconds | number | true | milliseconds |
config.key | string | false | The unique job key |
config.enable | boolean | false | default is true, when false, the job will not execute |
config.maxRetry | number | false | the max retry count, default is -1 not retry |
config.retryInterval | number | false | the retry interval, default is 5000 |
config.immediate | boolean | false | running job immediately |
Inject Schedule instance
Make your job support distribution.
If you use NestCloud, the Locker will support dependency injection, or not use injection please.
FAQs
Nest - modern, fast, powerful node.js web framework (@schedule)
The npm package nest-schedule receives a total of 1,620 weekly downloads. As such, nest-schedule popularity was classified as popular.
We found that nest-schedule demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Streamline your login process and enhance security by enabling Single Sign-On (SSO) on the Socket platform, now available for all customers on the Enterprise plan, supporting 20+ identity providers.
Security News
Tea.xyz, a crypto project aimed at rewarding open source contributions, is once again facing backlash due to an influx of spam packages flooding public package registries.
Security News
As cyber threats become more autonomous, AI-powered defenses are crucial for businesses to stay ahead of attackers who can exploit software vulnerabilities at scale.