如何查看Sidekiq是否正在运行

27

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


try 'ps aux | grep sidekiq' - Said Kaldybaev
@SaidKaldybaev,看一下我的问题。我更新了我尝试过的内容(你的建议)。它总是给我true。 - AnkitG
https://dev59.com/E2Uo5IYBdhLWcg3wrhLj - HelloWorld
5个回答

43

一个小窍门:

ps aux | grep '[s]idekiq'

希望它能够工作。


好奇 - 为什么s需要在[]中? - Zulhilmi Zainudin
4
这里有一个很好的解释:https://askubuntu.com/questions/153419/how-does-this-tricky-bracket-expression-in-grep-work - dan

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

这是关于it技术方面的内容。

2

请参考这个问题,了解如何使用grep筛选ps输出,同时从输出中删除grep命令。


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`

它会返回进程 ID,例如:12247,并且您可以检查它是否正在运行:
Process.is_running?(12247) // true | false

1
我想实时检查这个,不想依赖PID,所以我根据你的想法创建了这个方法(使用了你的答案更新),并返回匹配数据。 - AnkitG

1
您可以将以下行添加到您的config/routes.rb文件中。
require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'

启动你的服务器,打开浏览器并检查你的进程和任务

你可以在Sidekiq Wiki中找到它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接