2013-05-07 12 views
15

W jednym z mojego projektu używam SidekiqJak znaleźć Sidekiq pracuje lub nie

Czy istnieje metoda konsola Sidekiq wbudowana/metoda, która pomaga mi znaleźć czy sidekiq pracuje czy nie.

Moje wymaganie jest rodzajem warunku wstępnego sprawdzenia, w przypadku gdy nie działa Sidekiq, zgłoszę błąd.

Próbowałem za pomocą grep jak

'ps -ef | grep sidekiq' 

ale to nie jest rozwiązanie mój cel.

Sposób szukam powinno być coś takiego:

Sidekiq.is_running? 

z góry dzięki.

Próbowałem też

Sidekiq nie działa

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 pracuje

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 

To jest zawsze wraca prawda .. Chcę złapać proces kiedy działa

+0

try „ps aux | grep sidekiq ' –

+0

@SaidKaldybaev, zobacz moje pytanie .. zaktualizowałem to, co próbowałem (sugestia ur). To zawsze daje mi prawdziwe – AnkitG

+0

http://stackoverflow.com/questions/15843637/how-to-tell-if-sidekiq-is-connected-to-redis-server – HelloWorld

Odpowiedz

1

widzę, spróbuj tego:

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` 

To będzie powrót pid lubisz: 12247, i można sprawdzić, czy to działa:

Process.is_running?(12247) // true | false 
+0

Chciałem to sprawdzić w locie i nie chciałem aby polegać na PID, więc stworzyłem metodę z twojego pomysłu (zaktualizowałem twoją odpowiedź tym, co "użyłem") i powracając dane meczowe. – AnkitG

1

Zobacz this question dla jak filtrować ps wyjście przy użyciu polecenia grep, podczas gdy polecenie grep jest usuwane z wyjścia.

20

mały trick:

ps aux | grep '[s]idekiq' 

Nadzieja to działa

2

Najlepiej można to zrobić bezpośrednio z samej Ruby. Umieścić to w jakimś zadaniu natarcia lub autonomicznym skryptu (nie zapomnij podać Sidekiq szczegóły połączenia)

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 

Od https://github.com/mperham/sidekiq/wiki/API#processes