web-dev-qa-db-ja.com

Sidekiqを再起動します

Sidekiqを再起動する正しい方法は何ですか。起動時にワーカーのコードがキャッシュされているように見えるので、ワーカーに変更を加えるたびに再起動する必要があります。 Ctrl/Cでこれを行っていますが、プロセスが終了してプロンプトに戻るまでに長い時間がかかります。

すぐに再起動を強制する方法はありますか?

SinatraがPOW経由で実行されている最新バージョンを使用しています。

17
Undistraction

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

使用例:

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

ここで、60は、すべてのSidekiqスレッドの処理が完了するまで待機する秒数を表します。 60秒が経過し、すべてが完了していない場合、それらは自動的に強制終了されます。

また、神の宝石を使用してSidekiqを監視、停止、開始、再起動することをお勧めします。

これを行うと、bundle exec godstopを使用してすべての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
16
Henley Chiu