crontab node

crontab-node

說明

給大家推薦一個定時器,先上git地址

https://github.com/luoage/cro...

定時方式只支持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框架,它內部定時器也是這種方式。

效果

clipboard.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章