Мониторинг комплекта exec unicorn_rails с bluepill

Из-за жалоб 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 ответа

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

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

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

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

Когда ты бежишь 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,

Другие вопросы по тегам