2013-05-14 69 views
1

我正在部署一個帶有sidekiq的rails應用程序。在每個部署Capistrano停止以前的運行版本的sidekiq(一個紅寶石進程),然後啓動一個新的。我用monit監控sidekiq pid文件。如何配置monit以允許更改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實例正在運行的方法嗎?

回答

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