1

我正在使用 sidekiq 部署 Rails 应用程序。在每次部署时,Capistrano 都会停止以前运行的 sidekiq 版本(一个 ruby​​ 进程),然后启动一个新版本。我正在用monit监控sidekiq pid文件。

问题:每次我部署 pid 文件更改但 monit 检测到它已更改并重新启动进程。经过几天的多次发布,我最终得到了多个 sidekiq 实例,而我只想要一个。

这是我对 sidekiq 的监控配置:

check process sidekiq_main with pidfile /srv/apps/orders/current/tmp/pids/sidekiq.pid
  every 3 cycles
  start program = "/bin/bash -c -l 'cd /srv/apps/orders/current ; nohup bundle exec sidekiq -e production -C /srv/apps/orders/current/config/sidekiq.yml -i 0 -P /srv/apps/orders/current/tmp/pids/sidekiq.pid >> /srv/apps/orders/current/log/sidekiq.log 2>&1 &'"
  stop program  = "/bin/bash -c -l 'cd /srv/apps/orders/current ; bundle exec sidekiqctl stop /srv/apps/orders/current/tmp/pids/sidekiq.pid 10'"
  group sidekiq

有没有办法配置 monit 以允许 pid 文件更改并仅确保 sidekiq 实例正在运行?

4

1 回答 1

4

覆盖默认的 capistrano 任务,以确保通过 monit 重新启动 sidekiq。

例如,您可以将其添加到您的 deploy.rb

namespace :sidekiq do    
  desc "Restart sidekiq"
  task :restart, :roles => :app, :on_no_matching_servers => :continue do
    run "sudo /usr/bin/monit restart sidekiq"
  end
end
于 2013-06-05T09:08:38.183 回答