【问题标题】:How to find Sidekiq is running or not如何查找 Sidekiq 是否正在运行
【发布时间】:2013-05-01 06:47:33
【问题描述】:

在我的一个项目中,我正在使用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.. 我想在它运行时捕捉它

【问题讨论】:

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


【解决方案1】:

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

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

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

您可以从Sidekiq Wiki找到它

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      一个小技巧:

      ps aux | grep '[s]idekiq'
      

      希望有效果

      【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        我明白了,试试这个:

        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
        

        【讨论】:

        • 我想即时检查,不想依赖 PID,所以我根据你的想法创建了方法(用“我使用的”更新了你的答案)并返回匹配数据。
        猜你喜欢
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 2018-10-12
        • 1970-01-01
        • 2017-10-14
        • 2016-10-21
        相关资源
        最近更新 更多