2013-01-15 17 views
15

Wie sidekiq neu gestartet werden kann. Es scheint den Code meiner Arbeiter zu speichern, wenn ich ihn starte, also muss ich ihn jedes Mal neu starten, wenn ich meine Arbeiter ändere. Ich mache das mit Ctrl/C, aber der Prozess dauert eine lange Zeit, um mich zu der Eingabeaufforderung zurückzubringen.Sidekiq neu starten

Gibt es eine Möglichkeit, einen Neustart mit sofortiger Wirkung zu erzwingen?

Ich benutze die neueste Version mit Sinatra läuft über POW.

Antwort

14

Sidekiq kommt mit dem Befehl sidekiqctl, der die mit Ihrem Sidekiq-Prozess verbundene PID stoppen kann. Sie übergeben die PID-Datei und die Anzahl der Sekunden, bis alle Threads beendet sind.

Probe Verbrauch:

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

Hier 60 stellt die Anzahl der Sekunden zu warten, bis alle Sidekiq Threads verarbeiten sind fertig. Wenn 60 Sekunden verstreichen und alle nicht erledigt sind, werden sie automatisch beendet.

Ich empfehle auch die Verwendung des God Gem, um Sidekiq zu überwachen, zu stoppen, zu starten und neu zu starten.

Sobald Sie das tun, können Sie Bundle Exec Gott Stop verwenden, um alle Sidekiq Threads zu stoppen.

Hier ist mein Gott Datei, als Beispiel:

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

Perfect. Danke vielmals. – Undistraction

+0

Wie soll meine sidekiq.pid Datei aussehen? – Undistraction

+2

Es sollte nur die PID (Nummer) der Sidekiq Prozess-ID enthalten. Führe ps -ef | aus grep "sidekiq", um es zu bekommen. –