gpt4 book ai didi

ruby - 重启 Sidekiq

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:43 29 4
gpt4 key购买 nike

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

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

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

最佳答案

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

关于ruby - 重启 Sidekiq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343715/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com