1

我有一个议程作业,当我第一次定义它时,它运行得非常好。我可以在 MongoDB 中看到相应的文档,一切都很好。但是当服务器重新启动或我按“Ctrl+C”并终止进程时,重新运行我的应用程序后,该作业不会运行。

在git上也有很多关于这个问题的讨论。

我努力了:

1- 优雅地处理 SIGTERM

2- 运行 MongoDB 更新查询,并在启动应用程序时将 lockedAt、lastModifiedBy、lastRunAt 设置为 null。

两者都不为我工作。我可以在 MongoDB 中看到该作业未处于锁定状态,所以我很困惑为什么如果重新启动应用程序它不运行?

4

1 回答 1

1

好吧,如果您已经尝试了所有方法,那么您不妨更新所有未能以如下方式开始的作业:

  agendaJobs.update({
    lockedAt: {
      $exists: true
    },
    lastFinishedAt: {
      $exists: false
    }
  }, {
    $unset: {
      lockedAt: undefined,
      lastModifiedBy: undefined,
      lastRunAt: undefined
    },
    $set: {
      nextRunAt: new Date()
    }
  }, {
    multi: true
  })

这是蛮力解决问题的一种方法,基本上将所有锁定的作业设置为基本上重新安排。

顺便说一下,这是 git 上建议的方法之一。

如果您想了解整个上下文,它就来自这里。

于 2018-09-29T18:14:03.403 回答