Как запускать задание каждые 5 секунд с помощью повестки дня в nodejs

Я использую повестку дня для запуска заданий в моем приложении 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В чем может быть проблема.

1 ответ

Добавьте 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();
  });

}

Модуль повестки дня основан на человеко-интервальном модуле ( 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-cron или https://www.npmjs.com/package/node-schedule

Другие вопросы по тегам