2013-05-07 55 views
15

在我的項目之一,我使用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。我要趕的過程當它運行

+0

試「的ps aux | grep sidekiq' – 2013-05-07 10:42:59

+0

@SaidKaldybaev,看到我的問題..我更新了我試過的(你的建議)。它總是讓我真的 – AnkitG 2013-05-07 10:54:41

+0

http://stackoverflow.com/questions/15843637/how-to-tell-if-sidekiq-is-connected-to-redis-server – HelloWorld 2014-03-10 16:05:35

回答

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 
+0

我想檢查這個動態,並不想要依賴於PID,所以我從你的想法創建了方法(用「我用過的」更新了你的答案)並返回了匹配數據。 – AnkitG 2013-05-09 09:19:46

1

對於如何篩選PS見this question使用grep輸出,同時消除輸出中的grep命令。

20

一個小技巧:

ps aux | grep '[s]idekiq' 

希望工程

2

理想情況下,你可以從紅寶石本身直接做到這一點。將這個在一些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