Мониторинг комплекта exec unicorn_rails с bluepill - PullRequest
5 голосов
/ 03 июня 2011

Из-за жалоб unicorn_rails на различные версии гемов мы перешли к запуску bundle exec unicorn_rails ... в наших файлах bluepill. Это изменение решило эту конкретную проблему, и все началось и прекратилось, но когда мы попробуем статус sudo bluepill, мы получим

единорог (пикс: XXXXXX): без контроля

Похоже, что bluepill сейчас не отслеживает процессы единорога. Он перезапустит дочерние процессы, если я остановлю их, но не перезапустит родительский процесс.

Я искал вокруг, но не могу найти много об этой проблеме и надеялся, что кто-то может пролить свет на это. Файл конфигурации bluepill

app_dir = "/opt/local/share/httpd/apps/xyz"
Bluepill.application('xyz', :log_file => "#{app_dir}/current/log/bluepill.log") do |app|
  app.process('unicorn') do |process|
    process.pid_file    = "#{app_dir}/shared/pids/unicorn.pid"
    process.working_dir = "#{app_dir}/current"

    process.stdout = process.stderr = "#{app_dir}/shared/log/unicorn.err.log"
    process.start_command = "bundle exec unicorn_rails -D -c #{app_dir}/current/config/environments/production/unicorn.rb -E production"
    process.stop_command = "kill -QUIT {{PID}}"
    process.restart_command = "kill -USR2 {{PID}}"

    process.start_grace_time = 8.seconds
    process.stop_grace_time = 5.seconds
    process.restart_grace_time = 13.seconds

    process.monitor_children do |child_process|
      child_process.stop_command = "kill -QUIT {{PID}}"

      child_process.checks :mem_usage, :every => 10.seconds, :below => 200.megabytes, :times => [3,5]
      child_process.checks :cpu_usage, :every => 10.seconds, :below => 50, :times => [3,5]
    end
  end

end

Ответы [ 2 ]

3 голосов
/ 16 сентября 2011

Я знаю, что этот вопрос старый, но я сталкивался с этой проблемой уже несколько недель. Мои подозрения возникли, когда я понял, что «прекращение приема синей таблетки», а затем перезагрузка таблетки во время работы единорога позволяло синей таблетке рассмотреть процесс «вверх».

@ blt04 ответ не помог. Сегодня я пришел к осознанию. Моего льготного начала в 8 секунд было недостаточно, потому что у меня было preload_app true в моей конфигурации единорога ... и мое приложение (Rails) загружалось 12 секунд, а не 8.

Увеличение времени запуска до 30 секунд (значительно превышающее необходимое) решило проблему. Bluepill просто говорит «запуск» в течение 30 секунд, а затем идет «вверх» правильно. Единорог запускается и работает как обычно.

Вы захотите, чтобы время перезапуска было больше, чем требуется для запуска Rails.

3 голосов
/ 18 августа 2011

Когда вы запускаете bundle exec, он устанавливает среду и блокирует процесс unicorn_rails. Bluepill заканчивает мониторингом оригинального процесса bundle exec вместо единорога, поэтому вы видите неконтролируемый.

Я настроил свою среду связывания прямо в bluepill, а затем сразу выполнил unicorn_rails:

Bluepill.application('xyz') do |app|
  app.environment = `env -i BUNDLE_GEMFILE=#{app_dir}/Gemfile bundle exec env`.lines.inject({}) do |env_hash,l|
    kv = l.chomp.split('=',2)
    env_hash[kv[0] = kv[1]
    env_hash
  end

  app.process('unicorn') do |process|
    process.start_command = "unicorn_rails -D -c #{app_dir}/current/config/environments/production/unicorn.rb -E production"
  end
end

(Примечание. Я упустил часть вышеуказанного файла конфигурации для ясности. Ваш файл конфигурации выглядит хорошо, просто попробуйте добавить app.environment материал выше и удалить bundle exec из вашей команды запуска.)

Это настраивает среду в bluepill путем захвата переменных среды компоновщика с помощью обратных кавычек, синтаксического анализа возвращаемой строки в хеш и присвоения ей app.environment.

...