如果 Sidekiq 未处于 运行 状态 - Rails,则自动启动它

Start Sidekiq automatically if it is not in running state - Rails

我正在为我的 cron 作业使用 redis serversidekiq,但有时 sidekiq 会在后端自动终止。

我想从我的控制器的操作中重新启动 sidekiq 或在它停止时自动重新启动而不停止我的 rails 应用程序服务器。

请建议我如何解决这个问题?

启动外部程序不应该是您的应用程序的责任。

安装并使用像 bluepill or god 这样的服务器监控工具,以确保所有依赖项都已启动并且 运行。

您可以检查 sidekiq 和 redis 服务器 运行 或 运行 通过 :

  def redis_connected?
    !!Sidekiq.redis(&:info) rescue false
  end

  def sidekiq_connected?
    ps = Sidekiq::ProcessSet.new
    ps.size > 0 ? true : false 
  end

你也可以从你的控制器开始,但这不是一个好方法,因为它会启动 sidekiq 但会杀死 rails 服务器。

  def start_sidekiq
    system "redis-server &" if !redis_connected?
    system "bundle exec sidekiq -d" if !sidekiq_connected?
    flash[:sidekiq_notification]="Starting server... Please refresh after few seconds"
    redirect_to :back
  end

或安装并使用服务器监控工具

我认为这是错误的做法。

我建议你设置一个监控系统,它会自动启动你失败的工作人员 - 你可以使用 God, Monit 或任何你喜欢的。

但是,如果您 确实 需要它,您可以从 ruby 执行系统调用 - 只需将其包装在 ` ` 或 %x{}(例如 %x{ bundle exec sidekiq }