web-dev-qa-db-ja.com

異なる間隔でタスクを実行できるNodejsスケジューラーが必要です

さまざまな間隔でいくつかのタスクをスケジュールできるノードジョブスケジュールを探しています。例えば、

  • 関数Aを30秒ごとに呼び出す
  • 関数Bを60秒ごとに呼び出す
  • 7日ごとに関数Cを呼び出す

また、プロセスを開始および停止できるようにします。

これまでのところ、私は見てきた:

  • 後で -構文は私を混乱させます。また、どうやら一ヶ月を超えてタスクをスケジュールすることはできません

  • agenda -は最も有望なようですが、データベースの機能について混乱しています

  • タイムプラン -シンプルすぎて、開始および停止できない

後者の構文はわかりにくいです。

117
user379468

node-cron をお勧めします。 Cronパターンを使用してtasksを実行できます。

'* * * * * *' - runs every second
'*/5 * * * * *' - runs every 5 seconds
'10,20,30 * * * * *' - run at 10th, 20th and 30th second of every minute
'0 * * * * *' - runs every minute
'0 0 * * * *' - runs every hour (at 0 minutes and 0 seconds)

しかし、より多くのcomplexスケジュール.

'00 30 11 * * 1-5' - Runs every weekday (Monday through Friday) at 11:30:00 AM. It does not run on Saturday or Sunday.

サンプルコード:10分ごとにジョブを実行:

var cron = require('cron');
var cronJob = cron.job("0 */10 * * * *", function(){
    // perform operation e.g. GET request http.get() etc.
    console.info('cron job completed');
}); 
cronJob.start();

node-cron wikiでより多くの例を見つけることができます

Cron設定の詳細は cron wikiにあります

私は多くのプロジェクトでそのライブラリを使用してきましたが、それは仕事をしています。それが役立つことを願っています。

203
Tom

node-cron および agenda を使用しました。

node-cronは非常にシンプルなライブラリで、crontabのような非常に基本的で理解しやすいAPIを提供します。設定は不要で、機能します。

var cronJob = require('cron').CronJob;
var myJob = new cronJob('00 30 11 * * 1-5', function(){...});
myJob.start();

agendaは非常に強力で、より複雑なサービスに適しています。 ifttt を考えると、何百万ものタスクを実行する必要があります。 agendaが最適です。

注:アジェンダを使用するには、Mongodbが必要です

var Agenda = require("Agenda");
var agenda = new Agenda({db: { address: 'localhost:27017/agenda-example'}});
agenda.every('*/3 * * * *', 'delete old users');
agenda.start();
35
Ryan Wu

宣言的なインターフェイスを提供するモーメント期間を使用して、setIntervalのラッパーを提供するノードモジュールを作成しました。

npmは毎回インストールします

var every = require('every-moment');

var timer = every(5, 'seconds', function() {
    console.log(this.duration);
});

every(2, 'weeks', function() {
    console.log(this.duration);
    timer.stop();
    this.set(1, 'week');
    this.start();
});

https://www.npmjs.com/package/every-moment

https://github.com/raygerrard/every-moment

10
raygerrard

最高のランキングは

1.ノードスケジュール

2.後で

3.crontab

node-schedule のサンプルは次のとおりです。

var schedule = require("node-schedule");
var rule = new schedule.RecurrenceRule();
//rule.minute = 40;
rule.second = 10;
var jj = schedule.scheduleJob(rule, function(){
    console.log("execute jj");
});

多分あなたは node modules から答えを見つけることができます。

10
Richard Xue

nodeJSのデフォルト

https://nodejs.org/api/timers.html

setInterval(function() {
    // your function
}, 5000);
6
Rodrigo Adachi

timexeという小さなモジュールを作成しました。

  • シンプルで信頼性の高いコードで、依存関係はありません
  • 解像度はミリ秒単位であり、時間の経過とともに高精度になります
  • Cronに似ていますが、互換性はありません(逆順およびその他の改善)
  • 私もブラウザで働いています

インストール:

npm install timexe

つかいます:

var timexe = require('timexe');
//Every 30 sec
var res1=timexe(”* * * * * /30”, function() console.log(“Its time again”)});

//Every minute
var res2=timexe(”* * * * *”,function() console.log(“a minute has passed”)});

//Every 7 days
var res3=timexe(”* y/7”,function() console.log(“its the 7th day”)});

//Every Wednesdays 
var res3=timexe(”* * w3”,function() console.log(“its Wednesdays”)});

// Stop "every 30 sec. timer"
timexe.remove(res1.id);

timexeジョブ配列内のエントリを直接削除/再追加することにより、開始/停止機能を実現できます。ただし、エクスプレス機能ではありません。

1
Simon Rigét