給你們推薦一個定時器,先上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框架,它內部定時器也是這種方式。