给你们推荐一个定时器,先上git地址node
https://github.com/luoage/cro...linux
定时方式只支持linux crontab写法,若是一个进程一直存在,能够使用 cron-parser,这里只讨论配合linux crontab一块儿使用的状况,目的是解决多个文件放在crontab的状况,简化定时任务。laravel
首先把定时器放入crontab每分钟执行一次git
crontab -lgithub
* * * * * node path/c.js
使用方法1express
c.jspromise
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 */
第二个参数,目的是防止同步执行时时间过长,接收自定义时间ui
使用方法2spa
使用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框架,它内部定时器也是这种方式。