1

sidekiq を使用して Rails アプリをデプロイしています。デプロイのたびに、Capistrano は以前に実行されていたバージョンの sidekiq (Ruby プロセス) を停止してから、新しいバージョンを開始します。sidekiq pid ファイルを monit で監視しています。

問題: pid ファイルをデプロイするたびに変更されますが、monit はファイルが変更されたことを検出し、プロセスを再起動します。数日間の期間と複数のリリースで、必要な sidekiq インスタンスが 1 つだけになってしまいます。

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

pid ファイルの変更を許可し、sidekiq インスタンスが実行されていることのみを確認するように monit を構成する方法はありますか?

4

1 に答える 1

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
于 2013-06-05T09:08:38.183 に答える