crontab-node
说明
给大家推荐一个定时器,先上git地址
https://github.com/luoage/crontab-node
定时方式只支持linux crontab写法,如果一个进程一直存在,可以使用 cron-parser,这里只讨论配合linux crontab一起使用的情况,目的是解决多个文件放在crontab的情况,简化定时任务。
使用方法
首先把定时器放入crontab每分钟执行一次
crontab -l
* * * * * node path/c.js
使用方法1
c.js
const crontab = require('crontab-node');
// 每两分钟执行一次
crontab('*/2 * * * *') && console.log('hit success !');
crontab是一个同步方法,提供三个参数
/**
* 定时器
*
* @param {string} expression 定时器表达式
* @param {mixed} [date] 使用moment接收的时间格式
* @param {function|promise} [cb] 同步方法,或者promise对象
*
* @return boolean
*/
第二个参数,目的是防止同步执行时时间过长,接收自定义时间
使用方法2
使用node做定时器的,最重要的是如何在执行完成后关闭进程,所以这里增加了一个监听方法,上代码
const crontab = require('crontab-node');
const eventEmitter = require('crontab-node/eventEmitter');
eventEmitter.on('crontab-node exit', () => {
process.exit(0);
});
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 1);
});
setInterval(() => {
console.log(new Date());
crontab('*/2 * * * *', undefined, () => {
return promise.then(() => {
console.log('I am callback, just excute once');
});
});
}, 1000);
所有方法执行完成后抛出 “crontab-node exit” 事件, 监听后可以把进程关闭掉。PHP的小伙伴如果使用laravel框架,它内部定时器也是这种方式。