0

我正在使用议程在我的 nodejs 应用程序中运行作业,下面是我agenda.js的议程配置文件。

var Agenda = require('agenda');

var connectionString = 'localhost:27017/csgo';
var agenda = new Agenda({db: { address: connectionString, collection: 'jobs' }});

require('./jobs/game_play')(agenda);

module.exports = agenda;

下面是我每 5 秒运行一次游戏的脚本,

module.exports = function(agenda) {
  agenda.define('start new play', function(job, done) {
    console.log('new play agenda');
  });

  agenda.on('ready', function() {
    agenda.every('5 seconds', 'start new play');
    agenda.start();
  });

}

运行我的agenda.js脚本后,下面是我保存在数据库中的工作,

{ "_id" : ObjectId("59423d0e4b9581f728af1b6a"), "name" : "start new play", "type" : "single", "data" : null, "priority" : 0, "repeatInterval" : "5 seconds", "repeatTimezone" : null, "lastModifiedBy" : null, "nextRunAt" : ISODate("2017-06-15T07:53:55.794Z"), "lockedAt" : ISODate("2017-06-15T07:53:50.789Z"), "lastRunAt" : ISODate("2017-06-15T07:53:50.794Z") }

而不是5 seconds,我的工作是在每一个之后运行5 minutes,这可能是什么问题。

4

2 回答 2

2

添加 done() 以完成该过程。希望对您有所帮助!

module.exports = function(agenda) {
  agenda.define('start new play', function(job, done) {
    console.log('new play agenda');
    done();
  });

  agenda.on('ready', function() {
    agenda.every('5 seconds', 'start new play');
    agenda.start();
  });

}
于 2019-06-26T08:13:08.423 回答
0

议程模块基于人类间隔模块(https://github.com/rschmukler/human-interval)。

在文档中,您可以看到支持秒数,但您可以设置的最小间隔为 1 分钟。

他们说支持秒,因为您可以将间隔设置为“1 分 30 秒”。

您可以尝试将间隔作为 cron 格式传递:

module.exports = function(agenda) {
  agenda.define('start new play', function(job, done) {
    console.log('new play agenda');
  });

  agenda.on('ready', function() {
    agenda.every('*/5 * * * * *', 'start new play');
    agenda.start();
  });

}

它不受支持,您需要考虑使用不同的模块,例如https://www.npmjs.com/package/node-cronhttps://www.npmjs.com/package/node-schedule

于 2017-06-15T09:00:25.057 回答