Skip to content
This repository was archived by the owner on Nov 13, 2024. It is now read-only.

Commit a5ee102

Browse files
committed
修复 计划任务表达式检查
1 parent 46ac2f9 commit a5ee102

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/service/system_instance_control.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,12 @@ class InstanceControlSubsystem {
9494
if (!this.checkTask(key, task.name)) throw new Error("已存在重复的任务");
9595
let job: IScheduleJob;
9696
if (needStore) logger.info(`创建计划任务 ${task.name}:\n${JSON.stringify(task)}`);
97+
98+
// 最小间隔时间检查
9799
if (task.type === 1) {
100+
let internalTime = Number(task.time);
101+
if (isNaN(internalTime) || internalTime < 1) internalTime = 1;
102+
98103
// task.type=1: 时间间隔型计划任务,采用内置定时器实现
99104
job = new IntervalJob(() => {
100105
this.action(task);
@@ -106,9 +111,17 @@ class InstanceControlSubsystem {
106111
task.count--;
107112
this.updateTaskConfig(key, task.name, task);
108113
}
109-
}, Number(task.time));
114+
}, internalTime);
110115
} else {
111-
// task.type=1: 指定时间型计划任务,采用 node-schedule 库实现
116+
// 表达式合法性检查: 8 19 14 * * 1,2,3,4
117+
const timeArray = task.time.split(" ");
118+
const checkIndex = [0, 1, 2];
119+
checkIndex.forEach((item) => {
120+
if (isNaN(Number(timeArray[item])) && Number(timeArray[item]) >= 0) {
121+
throw new Error(`计划任务创建错误,不正确的时间表达式: \n${task.name}: ${timeArray}\n请尝试删除 data/TaskConfig/${task.name}.json 文件解决此问题`);
122+
}
123+
});
124+
// task.type=2: 指定时间型计划任务,采用 node-schedule 库实现
112125
job = schedule.scheduleJob(task.time, () => {
113126
this.action(task);
114127
if (task.count === -1) return;

0 commit comments

Comments
 (0)