如何配置monit以允许更改pid?

时间:2013-05-14 14:11:30

标签: capistrano sidekiq monit

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

问题:每次部署pid文件发生更改但monit检测到它已更改并重新启动该进程。在几天和多个版本的时间里,当我只想要一个时,我最终得到了多个sidekiq实例。

这是我对sidekiq的monit配置:

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实例正在运行?

1 个答案:

答案 0 :(得分: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