24

在我的一个项目中,我正在使用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 

它总是返回真..我想在它运行时捕捉它

4

5 回答 5

38

一个小技巧:

ps aux | grep '[s]idekiq'

希望它有效

于 2014-02-07T13:11:16.853 回答
7

理想情况下,您可以直接从 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

于 2017-02-01T07:51:27.297 回答
2

请参阅此问题以了解如何使用 grep 过滤 ps 输出,同时从输出中消除 grep 命令。

于 2013-11-15T16:35:33.577 回答
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
于 2013-05-07T11:24:18.940 回答
1

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

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

启动您的服务器,打开浏览器并检查您的进程和作业

您可以从Sidekiq Wiki中找到它

于 2018-06-01T12:43:25.520 回答