【问题标题】:Restarting Sidekiq重启 Sidekiq
【发布时间】:2012-12-29 21:42:34
【问题描述】:

重启sidekiq的正确方法是什么。当我启动它时,它似乎缓存了我的工人代码,所以每次我对我的工人进行更改时,我都需要重新启动它。我正在使用 Ctrl/C 执行此操作,但该过程需要很长时间才能结束并返回到提示符。

有没有办法立即强制重启?

我正在使用通过 POW 运行 Sinatra 的最新版本。

【问题讨论】:

    标签: ruby sinatra restart sidekiq


    【解决方案1】:

    Sidekiq 附带命令 sidekiqctl,它可以停止与您的 Sidekiq 进程关联的 PID。您传入 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
    

    【讨论】:

    • 我的 sidekiq.pid 文件应该是什么样的?
    • 它应该只包含 Sidekiq 进程 ID 的 PID(number)。运行 ps -ef | grep "sidekiq" 得到它。
    • 您介意更详细地解释一下吗。我应该什么时候运行它?我每次启动 Sidekiq 时肯定都需要运行它吗?然后将其添加到 god.config。
    • 当你运行 sidekiq 时,你会传递一个 yml 文件来指定 PID 文件。这是一个示例:github.com/mperham/sidekiq/blob/master/examples/config.yml。所以你会运行 bundle exec sidekiq -C
    • 谢谢。我正在配置它,然后启动它,但需要同时进行。
    猜你喜欢
    • 2014-08-18
    • 2018-04-15
    • 2016-05-26
    • 2016-11-08
    • 2016-01-03
    • 2019-06-29
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    相关资源
    最近更新 更多