@galaxy-stack/orbit-schedule
v0.1.9
Published
Task scheduling module for Orbit framework with cron support
Readme
@galaxy-stack/orbit-schedule
Mô tả
Module lập lịch tác vụ cho Orbit với hỗ trợ cron jobs, intervals và timeouts.
Tính năng chính
1. Cron Jobs
Chạy tác vụ theo lịch cron:
import { Scheduler, Cron, CronExpressions } from '@galaxy-stack/orbit-schedule';
@Scheduler()
class TasksService {
@Cron('0 0 * * * *') // Mỗi giờ
handleCron() {
console.log('Chạy mỗi giờ');
}
@Cron(CronExpressions.EVERY_DAY_AT_MIDNIGHT)
dailyTask() {
console.log('Chạy lúc nửa đêm');
}
}2. Intervals
Chạy lặp lại theo khoảng thời gian:
@Scheduler()
class TasksService {
@Interval(10000) // Mỗi 10 giây
handleInterval() {
console.log('Chạy mỗi 10 giây');
}
}3. Timeouts
Chạy một lần sau khoảng thời gian:
@Scheduler()
class TasksService {
@Timeout(5000) // Sau 5 giây
handleTimeout() {
console.log('Chạy một lần sau 5 giây');
}
}Cron Expressions
Format
┌───────────── giây (0-59) [tùy chọn]
│ ┌─────────── phút (0-59)
│ │ ┌───────── giờ (0-23)
│ │ │ ┌─────── ngày trong tháng (1-31)
│ │ │ │ ┌───── tháng (1-12)
│ │ │ │ │ ┌─── ngày trong tuần (0-6, 0=Chủ nhật)
│ │ │ │ │ │
* * * * * *Ví dụ
| Expression | Mô tả |
|------------|-------|
| * * * * * * | Mỗi giây |
| 0 * * * * * | Mỗi phút |
| 0 0 * * * * | Mỗi giờ |
| 0 0 0 * * * | Mỗi ngày lúc nửa đêm |
| 0 0 12 * * * | Mỗi ngày lúc 12h trưa |
| 0 0 0 * * 0 | Mỗi Chủ nhật |
| 0 0 0 1 * * | Ngày 1 mỗi tháng |
CronExpressions có sẵn
CronExpressions.EVERY_SECOND
CronExpressions.EVERY_5_SECONDS
CronExpressions.EVERY_MINUTE
CronExpressions.EVERY_HOUR
CronExpressions.EVERY_DAY_AT_MIDNIGHT
CronExpressions.EVERY_DAY_AT_NOON
CronExpressions.EVERY_WEEK
CronExpressions.EVERY_WEEKDAY
CronExpressions.EVERY_WEEKENDCấu hình Module
import { ScheduleModule } from '@galaxy-stack/orbit-schedule';
@Module({
imports: [ScheduleModule.forRoot()],
providers: [TasksService],
})
class AppModule {}Quản lý Job động
import { SchedulerService, SchedulerRegistry } from '@galaxy-stack/orbit-schedule';
class DynamicScheduler {
constructor(
private scheduler: SchedulerService,
private registry: SchedulerRegistry,
) {}
addJob() {
this.scheduler.addCronJob('myJob', '0 * * * * *', () => {
console.log('Dynamic job');
});
}
removeJob() {
this.registry.deleteCronJob('myJob');
}
getJobs() {
return this.registry.getCronJobs();
}
}Options
@Cron('* * * * *', {
name: 'my-cron-job',
timeZone: 'Asia/Ho_Chi_Minh',
disabled: false,
runOnInit: true, // Chạy ngay khi app start
})