Перезапуск Sidekiq

Как правильно перезапустить sidekiq. Кажется, что мой рабочий код кэшируется, когда я его запускаю, поэтому каждый раз, когда я вношу изменения в своих рабочих, мне нужно перезапустить его. Я делаю это с помощью Ctrl/C, но процесс занимает много времени, прежде чем я вернусь к подсказке.

Есть ли способ принудительно перезапустить с немедленным эффектом?

Я использую последнюю версию с Sinatra, работающим через POW.


person Undistraction    schedule 15.01.2013    source источник


Ответы (1)


Sidekiq поставляется с командой sidekiqctl, которая может остановить PID, связанный с вашим процессом Sidekiq. Вы передаете файл PID и количество секунд ожидания завершения всех потоков.

Пример использования:

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

Здесь 60 представляет собой количество секунд ожидания, пока все потоки Sidekiq не закончат обработку. Если проходит 60 секунд, и все не сделано, они автоматически убиваются.

Я также рекомендую использовать драгоценный камень Бога для мониторинга, остановки, запуска и перезапуска Sidekiq.

Как только вы это сделаете, вы можете использовать пакет exec god stop, чтобы остановить все потоки sidekiq.

Вот мой файл God, в качестве примера:

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
person Henley    schedule 15.01.2013
comment
Как должен выглядеть мой файл sidekiq.pid? - person Undistraction; 16.01.2013
comment
Он должен просто содержать PID (номер) идентификатора процесса Sidekiq. Запустите ps -ef | grep sidekiq, чтобы получить его. - person Henley; 16.01.2013
comment
Не могли бы вы объяснить это более подробно. Когда я должен запустить его? Конечно, мне нужно будет запускать его каждый раз, когда я запускаю Sidekiq? Затем добавьте его в god.config. - person Undistraction; 16.01.2013
comment
Когда вы запускаете sidekiq, вы передаете ему файл yml, в котором указываете ФАЙЛ PID. Вот пример: github.com/mperham/sidekiq/blob/master/ примеры/config.yml . Таким образом, вы должны запустить пакет exec sidekiq -C ‹ПУТЬ ФАЙЛА YML› - person Henley; 17.01.2013
comment
Спасибо. Я настраивал его, затем запускал, но мне нужно было сделать и то, и другое одновременно. - person Undistraction; 18.01.2013
comment
Чтобы уточнить ответ @HenleyChiu, вы можете использовать ps -ef | grep sidekiq, чтобы найти pid, затем создать файл (например, sidekiq.pid) с единственным содержимым, являющимся только что найденным pid, затем sidekiqctl stop <your_pidfile> - person eebbesen; 16.08.2013