如何找到Sidekiq正在运行与否

时间:2013-05-07 10:37:41

标签: ruby ruby-on-rails-3 sidekiq

在我的一个项目中,我正在使用Sidekiq

是否有任何内置的Sidekiq控制台方法/方法可以帮助我找到sidekiq是否正在运行。

我的要求是一种预先检查条件,如果Sidekiq没有运行,我将引发错误。

我尝试使用像

这样的grep
'ps -ef | grep sidekiq' 

但它没有解决我的目的。

我正在寻找的方法应该是:

Sidekiq.is_running? 

提前致谢。

我也试过

Sidekiq未运行

1.9.3p392 :021 > system 'ps aux | grep sidekiq'
ankitgupta      6683   0.0  0.0  2432768    600 s001  R+   11:47AM   0:00.00 grep sidekiq
ankitgupta      6681   0.0  0.0  2433432    916 s001  S+   11:47AM   0:00.01 sh -c ps aux | grep sidekiq
 => true

Sidekiq正在运行

1.9.3p392 :022 > system 'ps aux | grep sidekiq'
ankitgupta      6725   0.0  0.0  2432768    600 s001  S+   11:57AM   0:00.00 grep sidekiq
ankitgupta      6723   0.0  0.0  2433432    916 s001  S+   11:57AM   0:00.00 sh -c ps aux | grep sidekiq
ankitgupta      6707   0.0  1.3  3207416 111608 s002  S+   11:56AM   0:07.46 sidekiq 2.11.2 project_name [0 of 25 busy]  
 => true 

它总是返回true ..我想在运行时捕获进程

5 个答案:

答案 0 :(得分:30)

一个小技巧:

ps aux | grep '[s]idekiq'

希望它有效

答案 1 :(得分:3)

理想情况下,您可以直接从ruby本身执行此操作。把它放在一些rake任务或独立脚本中(不要忘记指定Sidekiq连接细节)

ps = Sidekiq::ProcessSet.new
ps.size # => 2
ps.each do |process|
  p process['busy']     # => 3
  p process['hostname'] # => 'myhost.local'
  p process['pid']      # => 16131
end
ps.each(&:quiet!) # equivalent to the USR1 signal
ps.each(&:stop!) # equivalent to the TERM signal

来自https://github.com/mperham/sidekiq/wiki/API#processes

答案 2 :(得分:2)

有关如何使用grep过滤ps输出,请参阅this question,同时从输出中删除grep命令。

答案 3 :(得分:1)

我明白了,试试看:

module Process
  class << self
    def is_running?(pid)
      begin
        Process.kill(0, pid)
        true
      rescue Errno::ESRCH
        false
      end
    end
  end
end

1.9.3p392 :001 > puts `ps aux | grep -i [s]idekiq`

它将返回你的pid:12247,你可以检查它是否正在运行:

Process.is_running?(12247) // true | false

答案 4 :(得分:0)

您可以将以下行添加到config/routes.rb

require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'

启动服务器,打开浏览器并检查您的处理和工作

您可以从Sidekiq Wiki

找到它