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