Перезапуск Sidekiq
Как правильно перезапустить sidekiq. Кажется, он кэширует код моих рабочих, когда я его запускаю, поэтому каждый раз, когда я делаю изменения в своих рабочих, мне нужно перезапустить его. Я делаю это с помощью Ctrl / C, но процесс занимает много времени, чтобы свернуть и вернуть меня в приглашение.
есть ли способ принудительно перезапустить с немедленным эффектом?
Я использую последнюю версию с Sinatra работает через POW.
1 ответов
Sidekiq поставляется с командой sidekiqctl, которая может остановить PID, связанный с вашим процессом Sidekiq. Вы передаете PID-файл и # секунд, чтобы дождаться завершения всех потоков.
Пример Использования:
sidekiqctl stop #{rails_root}/tmp/pids/sidekiq_website_crawler.pid 60
здесь 60 представляет собой количество секунд, ожидающих завершения обработки всех потоков Sidekiq. Если проходит 60 секунд, и все не сделано, они убиваются автоматически.
Я также рекомендую использовать God gem для мониторинга, остановки, запуска и перезагрузить Sidekiq.
Как только вы это сделаете, вы можете использовать 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