2013-01-15 47 views
15

Cách chính xác để khởi động lại sidekiq là gì. Có vẻ như tôi đã lưu lại mã của người lao động của mình khi tôi bắt đầu, vì vậy mỗi lần tôi thực hiện thay đổi cho công nhân của mình, tôi cần khởi động lại nó. Tôi đang làm điều này với Ctrl/C, nhưng quá trình này mất một thời gian dài để cuộn xuống và trả lại cho tôi lời nhắc.Khởi động lại Sidekiq

Có cách nào để bắt đầu khởi động lại với hiệu ứng ngay lập tức không?

Tôi đang sử dụng phiên bản mới nhất với Sinatra chạy qua POW.

Trả lời

14

Sidekiq đi kèm với lệnh sidekiqctl, có thể ngăn chặn PID được kết hợp với quy trình Sidekiq của bạn. Bạn vượt qua trong tập tin PID và số giây để chờ cho tất cả các chủ đề kết thúc.

Sample Cách sử dụng:

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

Ở đây, 60 đại diện cho số giây để chờ cho đến khi tất cả các chủ đề Sidekiq được xử lý xong. Nếu 60 giây trôi qua, và tất cả không được thực hiện, chúng sẽ tự động bị giết.

Tôi cũng khuyên bạn nên sử dụng đá quý Thiên Chúa để theo dõi, dừng, khởi động và khởi động lại Sidekiq.

Khi bạn thực hiện điều đó, bạn có thể sử dụng lệnh chặn nhóm exec để dừng tất cả các chủ đề sidekiq.

Đây là tập tin Thiên Chúa của tôi, như một ví dụ:

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. Cảm ơn rất nhiều. – Undistraction

+0

Tệp sidekiq.pid của tôi nên trông như thế nào? – Undistraction

+2

Chỉ nên chứa PID (số) của ID tiến trình Sidekiq. Chạy ps -ef | grep "sidekiq" để có được nó. –

Các vấn đề liên quan