index.js
1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
* Created by lintry on 18/12/20.
*/
"use strict";
/**
* 定时器定义
*/
const fs = require('fs-extra'),
path = require('path'),
cron = require('node-cron'),
moment = require('moment'),
SCHEDULE = require('../init/config').schedule,
Result = require('kml-express-stage-lib').Result,
logger = require('../init/log4js-init').cron;
const TTL = global.config.cache.ttl.CRON_LOCK;
const lockKey = require('../modules/lockKey');
const {sequelize, po} = global;
const id_worker = require('../modules/id_worker');
module.exports = function () {
let task_list = [];
// 遍历配置的定时器
Object.keys(SCHEDULE).forEach(cron_id => {
let cfg = SCHEDULE[cron_id];
if (cfg.enable && fs.existsSync(path.resolve(__dirname, cron_id + '.js'))) {
// 以键值在当前目录下加载异步执行模块
const async_runner = require('./' + cron_id);
if (!async_runner) {
logger.error(`没有找到可以执行的模块`, cfg.name);
return;
}
if (!cron.validate(cfg.cron)) {
logger.error('定时器的时间定义错误', cfg.cron);
return;
}
logger.info('开启定时器', cfg.name, cfg.cron);
task_list.push(cron.schedule(cfg.cron, async function () {
let result = await lockKey.lockKey(`cron:${cron_id}`, TTL);
if (result.locked) {
let result;
try {
result = await async_runner(cfg);
} catch (e) {
result = Result.Error(e.message); // 记录执行的错误
}
logger.info(moment().format('YYYY-MM-DD HH:mm:ss'), `${cfg.name} logger =>`, result.ret, result.msg, result.content);
}
}, {scheduled: false}));
}
});
return task_list;
};