Node.js 议程作业不';服务器重新启动后无法运行
我有一个议程作业,当我第一次定义它时,它运行得非常好。我可以在MongoDB中看到相应的文档,一切都很好。但当服务器重新启动或我按下“Ctrl+C”并终止进程时,在重新运行我的应用程序后,作业不会在之后运行 关于这个问题也有很多讨论 我试过: 1-优雅地处理SIGTERM 2-运行MongoDB更新查询,并在启动应用程序时将lockedAt、lastModifiedBy、lastRunAt设置为nullNode.js 议程作业不';服务器重新启动后无法运行,node.js,express,agenda,Node.js,Express,Agenda,我有一个议程作业,当我第一次定义它时,它运行得非常好。我可以在MongoDB中看到相应的文档,一切都很好。但当服务器重新启动或我按下“Ctrl+C”并终止进程时,在重新运行我的应用程序后,作业不会在之后运行 关于这个问题也有很多讨论 我试过: 1-优雅地处理SIGTERM 2-运行MongoDB更新查询,并在启动应用程序时将lockedAt、lastModifiedBy、lastRunAt设置为null 这两个都不适合我。我可以在MongoDB中看到作业未处于锁定状态,因此我很困惑,如果应用程序
这两个都不适合我。我可以在MongoDB中看到作业未处于锁定状态,因此我很困惑,如果应用程序重新启动,为什么它不运行 如果您已经尝试了所有方法,那么您也可以更新所有无法从以下内容开始的作业:
agendaJobs.update({
lockedAt: {
$exists: true
},
lastFinishedAt: {
$exists: false
}
}, {
$unset: {
lockedAt: undefined,
lastModifiedBy: undefined,
lastRunAt: undefined
},
$set: {
nextRunAt: new Date()
}
}, {
multi: true
})
这是一种暴力解决问题的方法,基本上可以将所有锁定的作业重新安排
顺便说一句,这是git上建议的方法之一
如果您想了解整个上下文,它来自于。谢谢@Akrion。在我的研究中,我也看到了这一点,但这对我不起作用,因为lockedAt已经是空的,因为工作还没有开始。对于我的情况,作为一种解决方法,我获取nextRunAt>currentdatetime的所有作业并重新安排它们。这会创建重复的作业,所以我会在以后删除重复的作业。但是,请稍候,上面的代码会为您执行此操作。它看起来是否有一个字段
lockedAt
,并不关心它的值。它也不会删除记录,只会重置字段。我认为这是一个更好的方法。