2013-01-15 29 views
15

sidekiq'i yeniden başlatmanın doğru yolu nedir? İşe başladığımda işçilerin kodlarını önbelleğe alıyor gibi görünüyor, bu yüzden işçilerimde her değişiklik yaptığımda yeniden başlatmam gerekiyor. Bunu Ctrl/C ile yapıyorum, ancak işlemin yavaşlaması ve beni istemine geri göndermesi uzun sürüyor.Yeniden Başlatma Sidekiq

Yeniden başlatmayı derhal etkisiz hale getirmenin bir yolu var mı?

En son sürüme POW üzerinden çalışan Sinatra ile devam ediyorum.

cevap

14

Sidekiq, Sidekiq işleminizle ilişkili PID'yi durduran sidekiqctl komutuyla birlikte gelir. Tüm iş parçacıklarının bitmesini beklemek için PID dosyasına ve saniyenin # saniyesini geçirirsiniz.

Örnek Kullanım: Burada

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

, 60 bütün Sidekiq ipler işlem yapılır kadar beklemek saniye sayısını temsil eder. 60 saniye geçerse ve hepsi yapılmazsa, otomatik olarak öldürülürler.

Ayrıca, Sidekiq'i izlemek, durdurmak, başlatmak ve yeniden başlatmak için Tanrı gemini kullanmanızı tavsiye ediyorum.

Bunu yaptıktan sonra, tüm sidekiq iş parçacıklarını durdurmak için bundle exec god durağını kullanabilirsiniz.

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

Mükemmel:

İşte bir örnek olarak, Tanrım dosyasıdır. Çok teşekkürler. – Undistraction

+0

Benim sidekiq.pid dosyam nasıl görünmeli? – Undistraction

+2

Sadece Sidekiq işlem kimliğinin PID numarasını içermelidir. Ps -ef çalıştır | grep "sidekiq" bunu elde etmek için. –

İlgili konular