2013-05-14 5 views
1

Я развертываю приложение rails с sidekiq. При каждом развертывании Capistrano останавливает предыдущую версию sidekiq (рубиновый процесс), а затем запускает новую. Я контролирую файл sidekiq pid с monit.Как настроить monit, чтобы разрешить изменение 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

Заменить задачу capistrano по умолчанию, чтобы обеспечить перезапуск sidekiq через monit.

Например, вы могли бы добавить к вашему 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 
Смежные вопросы