2013-01-15 12 views
15

Jaki jest poprawny sposób ponownego uruchomienia sidekiq. Wydaje się, że buforowałem kod mojego pracownika, kiedy go uruchamiam, więc za każdym razem, gdy wprowadzam zmiany do moich pracowników, muszę go ponownie uruchomić. Robię to za pomocą Ctrl/C, ale proces ten wymaga długiego czasu, aby się uspokoić i zwrócić mnie do zgłoszenia.Ponowne uruchamianie Sidekiq

Czy istnieje sposób na wymuszenie ponownego uruchomienia ze skutkiem natychmiastowym?

Używam najnowszej wersji z Sinatra działającej przez POW.

Odpowiedz

14

Sidekiq pochodzi z polecenia sidekiqctl, które może zatrzymać PID powiązane z procesem Sidekiq. Przekazujesz plik PID i # sekund, aby poczekać na zakończenie wszystkich wątków.

Próbka Zastosowanie:

sidekiqctl stop #{rails_root}/tmp/pids/sidekiq_website_crawler.pid 60 

Tutaj 60 reprezentuje liczbę sekund oczekiwania, aż wszystkie wątki Sidekiq zakończeniu przetwarzania. Jeśli minie 60 sekund, a wszystkie nie zostaną wykonane, zostaną automatycznie zabite.

Polecam również używanie klejnotu Boga do monitorowania, zatrzymywania, uruchamiania i restartowania Sidekiq.

Kiedy to zrobisz, możesz użyć pakietu god bos, aby zatrzymać wszystkie wątki sidekiq.

Oto mój plik Bóg, jako przykład:

rails_env = ENV['RAILS_ENV'] || "development" 
rails_root = ENV['RAILS_ROOT'] || "/home/hwc218/BuzzSumo" 
God.watch do |w| 
    w.dir  = "#{rails_root}" 
    w.name  = "website_crawler" 
    w.interval = 30.seconds 
    w.env  = {"RAILS_ENV" => rails_env} 
    w.interval = 30.seconds 
    w.start = "bundle exec sidekiq -C#{rails_root}/config/sidekiq_website_crawler.yml" 
    w.stop = "sidekiqctl stop #{rails_root}/tmp/pids/sidekiq_website_crawler.pid 60" 
    w.keepalive 


    # determine the state on startup 
    w.transition(:init, { true => :up, false => :start }) do |on| 
    on.condition(:process_running) do |c| 
     c.running = true 
    end 
    end 

    # determine when process has finished starting 
     w.transition([:start, :restart], :up) do |on| 
     on.condition(:process_running) do |c| 
     c.running = true 
     c.interval = 5.seconds 
    end 

     # failsafe 
     on.condition(:tries) do |c| 
     c.times = 5 
     c.transition = :start 
     c.interval = 5.seconds 
    end 
    end 

    # start if process is not running 
    w.transition(:up, :start) do |on| 
    on.condition(:process_running) do |c| 
     c.running = false 
    end 
    end 

    w.restart_if do |restart| 
     restart.condition(:restart_file_touched) do |c| 
      c.interval = 5.seconds 
      c.restart_file = File.join(rails_root, 'tmp', 'restart.txt') 
     end 
    end 
end 
+0

Perfect. Wielkie dzięki. – Undistraction

+0

Jak powinien wyglądać mój plik sidekiq.pid? – Undistraction

+2

Powinien zawierać tylko PID (numer) identyfikatora procesu Sidekiq. Uruchom ps -ef | grep "sidekiq", aby go zdobyć. –

Powiązane problemy