【问题标题】:Schedule multiple functions to run at specific interval in Node JS (CRON JOB)在 Node JS (CRON JOB) 中安排多个函数以特定时间间隔运行
【发布时间】:2017-11-16 17:33:28
【问题描述】:

我想使用 Node JS 在特定时间间隔执行三个函数。我看过这篇文章I need a Nodejs scheduler that allows for tasks at different intervals

我尝试过使用node-cronnode-schedule。但它不起作用!

我的代码如下,

var schedule = require('node-schedule')


var fs = require('fs')
var tar = require('tar')

var notification = require('./notification')

let changeInDir = function () {
    console.log('Testing CRON JOB !!!', new Date().toLocaleString())
    fs.watch('./test', (event, filename) => {
        console.log('a', event, 'event occurred.. on file', filename)
    })
}

// schedule a CRON Job
var changeFile = schedule.scheduleJob('4 * * * * *', changeInDir);


// send the Monthly snapshots
var monthlySnapshot = schedule.scheduleJob('5 * * * * *', notification.getViewDetails('Monthly'))

// send the Daily snapshots
var dailySnapshot= schedule.scheduleJob('10 * * * * *', notification.getViewDetails('Daily'))

我希望monthlySnapshot 将以5 seconds 间隔运行,而dailySnapshot 将以10 seconds 间隔运行,changeFile 将以4 seconds 间隔运行。

现在monthlySnapshotdailySnapshot 访问 MySQL 数据库以获取数据并相应地发送电子邮件。如果我只安排 changeFile 和 cmets 其他人它工作正常。但是当我尝试执行所有这三个时,它会给出以下错误消息并崩溃。

C:\Users\asau\Documents\LeaderBoardNodejs\archlb\src\server\node_modules\node-schedule\lib\schedule.js:174
    this.job.execute();
             ^

TypeError: this.job.execute is not a function
    at Job.invoke (C:\Users\asau\Documents\LeaderBoardNodejs\archlb\src\server\node_modules\node-schedule\lib\schedule.js:174:14)
    at Timeout._onTimeout (C:\Users\asau\Documents\LeaderBoardNodejs\archlb\src\server\node_modules\node-schedule\lib\schedule.js:542:11)
    at ontimeout (timers.js:365:14)
    at tryOnTimeout (timers.js:237:5)
    at Timer.listOnTimeout (timers.js:207:5)
[nodemon] app crashed - waiting for file changes before starting...

如何解决?使用node-cronnode-schedule 的任何示例都可以。

当我仅使用 nodemon notification.js 并正确发送电子邮件时,数据库访问工作正常。那里没有问题。

【问题讨论】:

  • notification.getViewDetails('Monthly')notification.getViewDetails('Daily') 是阻塞函数调用吗?他们是从数据库中获取数据然后是异步调用吗?
  • @SagarKarira:是的,它们是异步调用

标签: mysql node.js cron


【解决方案1】:

我使用节点 cron https://www.npmjs.com/package/cron

var momentTz = require('moment-timezone');
var CronJob = require('cron').CronJob;
var job = new CronJob('*/4 * * * * *', function() {
var a = momentTz.tz("Europe/Helsinki");
 //your logic
}, function () {

   console.log('work ended');
},
true,
'Europe/Helsinki'
);

job.start();

每 4 秒运行一次

【讨论】:

  • 也请发表您的意见。我也想知道我的错误。
猜你喜欢
  • 2017-08-26
  • 2018-11-13
  • 2022-06-21
  • 2019-12-23
  • 1970-01-01
  • 2018-12-03
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多