我需要一个Nodejs调度程序,允许不同间隔的任务

use*_*468 122 cron scheduled-tasks node.js

我正在寻找节点作业计划,这将允许我以不同的间隔安排许多任务.例如,

  • 呼叫功能每30秒一次
  • 每隔60秒呼叫功能B.
  • 每7天调用一次函数C.

我也希望能够启动和停止这个过程.

到目前为止,我看过:

  • 后来 - 语法让我感到困惑,显然你也无法安排超过一个月的任务

  • 议程 - 似乎是最有希望的,但我对数据库功能感到困惑

  • timeplan - 太简单了,无法启动和停止

我发现后者的语法令人困惑.

Tom*_*Tom 214

我会推荐node-cron.它允许使用Cron模式运行任务,例如

'* * * * * *' - 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)
Run Code Online (Sandbox Code Playgroud)

但也有更复杂的时间表,例如

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

示例代码:每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();
Run Code Online (Sandbox Code Playgroud)

您可以在node-cron wiki中找到更多示例

有关cron配置的更多信息可以在cron wiki 上找到

我一直在许多项目中使用该库,它完成了这项工作.我希望这会有所帮助.

  • cron语法可能看起来像_scary_.另一方面它存在很长时间并且广为人知,因此将获得大量的SO支持 (3认同)
  • 截至 2020 年,根据 [node-cron](https://www.npmjs.com/package/node-cron) 官方 npm 页面,此包的使用量已经下降。这个包最后一次在 npm 发布是在 2 年前,因此不会定期更新。现在,应该首选另一个包 [node-cron](https://www.npmjs.com/package/cron),它显然具有相同的名称,但使用不同的 URL。 (2认同)

Rya*_* Wu 36

我使用了node-cron议程.

node-cron是一个非常简单的库,它提供了非常基本且易于理解的api,如crontab.它不需要任何配置,只是工作.

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

议程非常强大,适合更复杂的服务.想想ifttt,你必须运行数百万个任务.议程将是最好的选择.

注意:您需要Mongodb才能使用Agenda

var Agenda = require("Agenda");
var agenda = new Agenda({db: { address: 'localhost:27017/agenda-example'}});
agenda.every('*/3 * * * *', 'delete old users');
agenda.start();
Run Code Online (Sandbox Code Playgroud)

  • 我认为你必须要求你的本地变量.var Agenda = require("议程"); (2认同)

小智 12

我认为最好的排名是

1.node时间表

2.later

3.crontab

节点计划的样本如下:

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");
});
Run Code Online (Sandbox Code Playgroud)

也许你可以从节点模块中找到答案.


ray*_*ard 10

我编写了一个节点模块,它使用提供声明性接口的时刻持续时间来提供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();
});
Run Code Online (Sandbox Code Playgroud)

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

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

  • github链接坏了(404) (4认同)

小智 6

nodeJS默认

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

setInterval(function() {
    // your function
}, 5000);
Run Code Online (Sandbox Code Playgroud)