0

假设我有一个使用@agenda/agenda安排的工作,就像这样

agenda.schedule('tomorrow at noon', 'printAnalyticsReport', {userCount: 100});

我想知道如果我的服务器/节点脚本操作系统关闭会发生什么?

  • 议程是否能够在下次服务器重新启动时重新启动过去的工作?
  • 如果没有,我怎样才能达到同样的效果?
4

1 回答 1

1

不是。如果它被关闭,议程应该选择你的工作gracefuly

这意味着,如果一切顺利,lockedAt将不会设置(将是null)实际的工作字段,这应该会暴露您的陈旧工作以供拾取。

但是,如果没有正常关闭,那么它们将被跳过,因为就议程而言,它们仍在运行。

在这种工作处于limbo模式的情况下,用于议程的 UI 工具非常有用。它向您显示所有正在运行的作业,并为您提供对正在发生的事情的一个很好的概述,因此在重新启动后您可以随时查看并解决任何问题。

另一种方法是运行脚本以在服务器启动时解锁所有锁定的作业:

db.agendaJobs.update({}, {$set: {lockedAt: null}});

或者更精确的方法来使用这种方法达到相同的结果。

或者可以在这里找到另一种比较干净的方法。

这是关于议程站的更多信息

于 2018-09-29T17:39:03.330 回答