2013-01-15 124 views
15

sidekiqを再起動する正しい方法は何ですか?私はそれを開始するときに私の労働者のコードをキャッシュするようだ、私は私の労働者を変更するたびに私はそれを再起動する必要があります。私はCtrl/Cでこれをやっていますが、処理が遅れてプロンプトに戻ります。Sidekqを再起動する

即時効果で強制的に再起動する方法はありますか?

私はPOW経由Sinatraで最新バージョンを使用しています。

答えて

14

Sidekiqにはsidekiqプロセスに関連付けられたPIDを停止できるsidekiqctlコマンドが付属しています。すべてのスレッドが終了するのを待つために、PIDファイルと秒数を渡します。

使用例:

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

、60はすべてのSidekiqスレッドが処理が完了するまで待機する秒数を表します。 60秒が経過するとすべて終了せずに自動的に強制終了されます。

サイドキックを監視、停止、開始、再起動するために神の宝石を使用することもお勧めします。

これを実行すると、bundle exec god stopを使用してすべてのsidekiqスレッドを停止できます。

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

パーフェクト:

は、ここでは一例として、私の神ファイルです。どうもありがとう。 – Undistraction

+0

sidekiq.pidファイルはどうすればいいですか? – Undistraction

+2

これには、SidekiqプロセスIDのPID(番号)だけを含める必要があります。 ps -ef |を実行します。それを得るためにgrep "sidekiq" –

関連する問題