Sidekiq列出所有工作[排队+运行]

aks*_*aks 10 ruby ruby-on-rails sidekiq

有没有办法获取当前队列中正在运行的所有作业的列表?基本上,我想知道给定班级的工作是否已经存在,我不想插入我的其他工作.我见过其他选择,但我想这样做.

在这里可以看到如何获取队列中的作业列表.

queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
  job.klass # => 'MyWorker'
end
Run Code Online (Sandbox Code Playgroud)

据我所知,这不包括处理/运行工作.有什么方法可以得到它们?

Has*_*Eqx 18

如果要从控制台列出所有当前正在运行的作业,请尝试此操作

workers = Sidekiq::Workers.new
workers.each do |_process_id, _thread_id, work|
  p work
end
Run Code Online (Sandbox Code Playgroud)

a work是哈希.

列出所有队列数据.

queue = Sidekiq::Queue.all
queue.each do |job|
  p job.klass, job.args, job.jid
end
Run Code Online (Sandbox Code Playgroud)

对于特定队列,将其更改为 Sidekiq::Queue.new('queue_name')

同样,您可以使用获得所有预定作业 Sidekiq::ScheduledSet.new

  • 这个答案可能已经过时了:我得到`NoMethodError:未定义的方法`klass'` (8认同)

小智 6

运行作业:

Sidekiq::Workers.new.each do |_process_id, _thread_id, work|
  p work
end
Run Code Online (Sandbox Code Playgroud)

所有队列中的排队作业:

Sidekiq::Queue.all.each do |queue|
  # p queue.name, queue.size
  queue.each do |job|
    p job.klass, job.args
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 需要澄清一点:Sidekiq::Queue.all 只会输出正在进行的作业,而不是计划的作业。正如接受的答案所述,您需要使用 Sidekiq::ScheduledSet.new 来获取计划的作业。 (6认同)
  • @sharq您是否可以考虑删除这个答案,因为它与接受的答案相同? (2认同)