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
Perfect. Danke vielmals. – Undistraction
Wie soll meine sidekiq.pid Datei aussehen? – Undistraction
Es sollte nur die PID (Nummer) der Sidekiq Prozess-ID enthalten. Führe ps -ef | aus grep "sidekiq", um es zu bekommen. –