qinglong/back/services/schedule.ts
2021-10-14 10:58:54 +08:00

62 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Service, Inject } from 'typedi';
import winston from 'winston';
import nodeSchedule from 'node-schedule';
import { Crontab } from '../data/cron';
import { exec } from 'child_process';
@Service()
export default class ScheduleService {
private scheduleStacks = new Map<string, nodeSchedule.Job>();
constructor(@Inject('logger') private logger: winston.Logger) {}
async generateSchedule({ _id = '', command, name, schedule }: Crontab) {
this.logger.info(
'[创建定时任务]任务ID: %scron: %s任务名: %s任务方法: %s',
_id,
schedule,
name,
);
this.scheduleStacks.set(
_id,
nodeSchedule.scheduleJob(_id, schedule, async () => {
try {
exec(command, async (error, stdout, stderr) => {
if (error) {
await this.logger.info(
'执行任务`%s`失败,时间:%s, 错误信息:%j',
name,
new Date().toLocaleString(),
error,
);
}
if (stderr) {
await this.logger.info(
'执行任务`%s`失败,时间:%s, 错误信息:%j',
name,
new Date().toLocaleString(),
stderr,
);
}
});
} catch (error) {
await this.logger.info(
'执行任务`%s`失败,时间:%s, 错误信息:%j',
name,
new Date().toLocaleString(),
error,
);
} finally {
}
}),
);
}
async cancelSchedule({ _id = '', name }: Crontab) {
this.logger.info('[取消定时任务],任务名:%s', name);
this.scheduleStacks.has(_id) && this.scheduleStacks.get(_id)?.cancel();
}
}