Meteor.setInterval在+;1天的正常运行时间(回调:未定义)

Meteor.setInterval在+;1天的正常运行时间(回调:未定义),meteor,Meteor,我们在setInterval回调中遇到了异常:在每隔几天按小时运行一次之后,间隔未定义。重新启动会解决它几天,直到它再次像这样断开。这可能是什么原因 (没有记录/抛出任何其他内容,也没有堆栈跟踪) Meteor:1.8.0.2导致崩溃的最可能原因是您反复调用setInterval。在短期内,这是可以的,但最终会有许多间隔计时器运行,这最终会成为一个问题,因为内存和处理负载 我更喜欢使用npm包节点cron,我用如下启动方法设置计时器: // // These are cron-style tim

我们在setInterval回调中遇到了
异常:在每隔几天按小时运行一次之后,间隔未定义。重新启动会解决它几天,直到它再次像这样断开。这可能是什么原因

(没有记录/抛出任何其他内容,也没有堆栈跟踪)


Meteor:1.8.0.2

导致崩溃的最可能原因是您反复调用
setInterval
。在短期内,这是可以的,但最终会有许多间隔计时器运行,这最终会成为一个问题,因为内存和处理负载

我更喜欢使用npm包
节点cron
,我用如下启动方法设置计时器:

//
// These are cron-style time specifiers
//
//                       ┌───────────── minute (0 - 59)
//                       │ ┌───────────── hour (0 - 23)
//                       │ │ ┌───────────── day of month (1 - 31)
//                       │ │ │ ┌───────────── month (1 - 12)
//                       │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday)
//                       │ │ │ │ │                                       7 is also Sunday on some systems)
//                       │ │ │ │ │
//                       │ │ │ │ │
//                       * * * * *

const TICKER_INTERVAL = '1,16,31,46 * * * *' // This runs 4 times an hour
// const TICKER_INTERVAL = '* * * * *' // This runs every minute (use when debugging)

Meteor.startup(() => {
  cron.schedule(TICKER_INTERVAL, Meteor.bindEnvironment(signoutTicker))
})
当然,这只适用于服务器(您知道这一点,不是吗?)


我发现这对我来说非常可靠。

你能为
startJob
添加代码吗?可能有一个错误没有显示在控制台上。许多Meteor函数设计用于处理其内部异常,以防止服务器完全停止(导致整个应用程序崩溃),可能这一个并不是“打印”错误。#Hi@Jankapunkt该方法相当大,并且调用了一系列其他函数。所有这些函数都不会抑制任何错误。虽然有两个try/catch块,但它们总是将错误记录在console.log中。此错误是否也发生在较短的时间范围内?如果是这样的话,最好改进代码的可重复性,这样我们也可以在我们的机器上试用。我同意Jankapunkt的观点,这几乎肯定是
startJob
中的内容。它不应该是“Meteor.setInterval(startJob,1000*60*60);”吗?
//
// These are cron-style time specifiers
//
//                       ┌───────────── minute (0 - 59)
//                       │ ┌───────────── hour (0 - 23)
//                       │ │ ┌───────────── day of month (1 - 31)
//                       │ │ │ ┌───────────── month (1 - 12)
//                       │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday)
//                       │ │ │ │ │                                       7 is also Sunday on some systems)
//                       │ │ │ │ │
//                       │ │ │ │ │
//                       * * * * *

const TICKER_INTERVAL = '1,16,31,46 * * * *' // This runs 4 times an hour
// const TICKER_INTERVAL = '* * * * *' // This runs every minute (use when debugging)

Meteor.startup(() => {
  cron.schedule(TICKER_INTERVAL, Meteor.bindEnvironment(signoutTicker))
})