问题描述
我在Rails中有一个轮询作业,它每隔X秒对服务器进行一次ping操作。
我正在使用Sidekiq / Redis执行此后台作业。
我希望从应用程序启动起每X秒执行一次此作业,直到应用程序被杀死为止。每当我再次启动服务器时,我都会清除它的Sidekiq队列并开始新作业
我想把它放在初始化器中 config / initializers / my_app_start.rb
require 'sidekiq/api' # for the case of rails console
module MyAppModule
class Application < Rails::Application
config.after_initialize do
SidekiqProcess.start! unless SidekiqProcess.is_running?
Sidekiq::Queue.new("online_orders").clear
# it calls itself after X seconds in "after_perform" callback
OnlineOrdersJob.perform_later("fetch")
Sidekiq::Queue.new("tunnelin").clear
TunnelinJob.perform_later("reload")
end
end
end
这是我的app / lib / sidekiq.rb
class SidekiqProcess
def self.is_running?
return system("ps aux | grep '[s]idekiq'")
end
def self.start!
system("ruby " + ENV['APP_ROOT'] + "/bin/sidekiq_up.rb &")
end
def self.get_pid
pid = `ps aux | grep sidekiq | grep -v grep | awk '{print $2}'`
if pid.present?
pid = pid.split("\n")[0]
end
return pid
end
def self.stop
pid = self.get_pid
if pid == nil || pid == ""
return "sidekiq pid not found"
end
return system("kill -HUP " + pid)
end
def self.stop!
pid = self.get_pid
if pid == nil || pid == ""
return "sidekiq pid not found"
end
return system("kill -9 " + pid)
end
end
问题是:它正在运行3次。我认为这是因为我的rails服务器配置创建了3个工作程序,每个工作程序将执行所有初始化程序。如何确保初始化程序仅运行一次,而与工作人员人数无关?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)