1.安装 node schedule
npm install node-schedule
2.引入 node schedule 并创建 schedule 实例
const schedule = require('node-schedule');
const { runTask } = require('./taskRunner');
const rule = new schedule.RecurrenceRule();//创建 RecurrenceRule对象来定义定时规则,注意,需要注意时区问题,时区会影响任务执行时间
rule.hour = [...Array(9).keys()].map(x => x + 15).concat([0, 1, 2, 3]); // 此处含义为 15点到凌晨三点
rule.minute = [0, 10, 20, 30, 40, 50];//分钟此处含义为 每小时的 0 ,10 ,20 ,30 ,40 ,50 分钟时执行一次任务 例 9点10分会执行一次
rule.second = 0; //此处为秒,使用同分钟
rule.tz = 'Asia/Shanghai'; // 指定时区 此处指定为上海时间
let job;//建立全局job变量
async function startJob(){
if(job){
return '任务执行中,请勿再次提交任务'
}
job = schedule.scheduleJob(rule, async () => {
console.log(`任务执行时间(上海时区): ${new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })}`);//初始化schedule实例
await runTask(); // 需要执行的定时任务方法
});
return '任务开启成功'
}
async function stopJob(){//停止任务
if(!job){
return '无任务执行,不需要暂停'
}
job.cancel()//调用cancel方法停止job
job = null;//清空job
return '任务暂停成功'
}
// 全局暴露开始结束方法以便手动开启,停止
module.exports = {stopJob,startJob};
3.job在接口中使用
// 手动启动任务
router.post('/taskRunStart', async (req, res) => {
let message = await startJob()
res.json({status: 'start', message: message});
});
// 手动暂停任务
router.post('/taskStop', async (req, res) => {
let message = await stopJob()
res.json({status: 'stopped', message: message});
});
Comments NOTHING