5

我有一个简单的 sidekiq 工作,我设置为使用发条每 5 分钟运行一次。我担心的是,如果作业时间超过 5 分钟,它会再次运行,如果它与原始作业同时运行,可能会导致一些问题。

有没有办法锁定发条,使其仅在前一次运行完成时才运行?

4

4 回答 4

2

我使用Sidekiq Unique Jobs gem来完成此任务。它具有防止重复作业的各种策略。

于 2017-03-09T23:52:42.543 回答
1
于 2017-03-10T21:50:42.143 回答
0

Sidekiq 允许您通过 API 查询队列。

您可以在任务运行时简单地查询 sidekiq 队列。检查队列和/或作业是否仍然存在。如果是,什么也不做。如果不是,请将作业排入队列。

我不知道您的工作是否位于单独的队列中,这可能是最好的。这样您就可以查看队列大小,如果它为 0,则启动另一个进程。

Sidekiq API

于 2017-03-09T21:11:11.283 回答
-1

一种选择是在作业开始时使用进程 PID 创建一个文件,并在作业结束时将其删除,如果 PID 文件已经存在,则在开始时中止作业。

虽然我的应用程序的这个特定部分没有使用 sidekiq,但想法是一样的。这是我的应用程序的操作方式:https ://github.com/WikiEducationFoundation/WikiEduDashboard/blob/master/lib/data_cycle/constant_update.rb

于 2017-03-09T21:09:54.120 回答