Agenda js:如果我的服务器在工作的预定时间出现故障怎么办?
Agenda js: what happens if my server is down on the scheduled time of a job?
假设我有一个使用 @agenda/agenda 安排的工作,像这样
agenda.schedule('tomorrow at noon', 'printAnalyticsReport', {userCount: 100});
我想知道如果我的 server/node 脚本 os 挂了会怎样?
- 议程是否能够在下次服务器重启时重启过去的作业?
- 如果没有,我怎样才能达到同样的效果?
是 和否。如果 Agenda 关闭 gracefuly
,它应该会选择你的工作。
这意味着如果一切顺利,实际工作 lockedAt
字段将不会设置(将是 null
),这应该会暴露您的陈旧工作以供提取。
但是,如果没有正常关闭,那么它们将被跳过,因为就议程而言,它们仍在 运行ning 中。
在这种情况下,作业处于 limbo
模式,UI tool for agenda 非常有用。它会向您显示所有作业 运行ning 并让您很好地了解正在发生的事情,因此在重新启动后您可以随时查看并解决任何问题。
另一种方法是 运行 在服务器启动时解锁所有锁定作业的脚本:
db.agendaJobs.update({}, {$set: {lockedAt: null}});
或使用 this method.
获得相同结果的更精确的方法
或者可以找到另一种比较简洁的方法 here。
这里有更多关于 Agenda stop
假设我有一个使用 @agenda/agenda 安排的工作,像这样
agenda.schedule('tomorrow at noon', 'printAnalyticsReport', {userCount: 100});
我想知道如果我的 server/node 脚本 os 挂了会怎样?
- 议程是否能够在下次服务器重启时重启过去的作业?
- 如果没有,我怎样才能达到同样的效果?
是 和否。如果 Agenda 关闭 gracefuly
,它应该会选择你的工作。
这意味着如果一切顺利,实际工作 lockedAt
字段将不会设置(将是 null
),这应该会暴露您的陈旧工作以供提取。
但是,如果没有正常关闭,那么它们将被跳过,因为就议程而言,它们仍在 运行ning 中。
在这种情况下,作业处于 limbo
模式,UI tool for agenda 非常有用。它会向您显示所有作业 运行ning 并让您很好地了解正在发生的事情,因此在重新启动后您可以随时查看并解决任何问题。
另一种方法是 运行 在服务器启动时解锁所有锁定作业的脚本:
db.agendaJobs.update({}, {$set: {lockedAt: null}});
或使用 this method.
获得相同结果的更精确的方法或者可以找到另一种比较简洁的方法 here。
这里有更多关于 Agenda stop