Использование Бога для мониторинга Unicorn - начните выйти с ненулевым кодом = 1

StackOverflow https://stackoverflow.com/questions/3877178

Вопрос

Я работаю над богом сценарием для мониторинга моих единорогов. Я начал с сценария примеров GitHub и изменял его, чтобы соответствовать моим конфигурации сервера. Как только Бог бежит, команды, такие как god stop unicorn а также god restart unicorn работать просто хорошо.

Однако, god start unicorn приводит к WARN: unicorn start command exited with non-zero code = 1. Отказ Странная часть заключается в том, что если я копирую сценарий запуска непосредственно из файла конфигурации, он начинается правильно, как совершенно новый Mustang.

Это моя команда запуска:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D

Я объявил все пути как абсолютно в файле конфигурации. Любые идеи, что может предотвратить работу этого сценария?

Это было полезно?

Решение

Я не использовал Unicorn в качестве сервера приложений, но я использовал Бога для мониторинга ранее.

Если я помню правильно, когда вы начнете Бога и даете свой файл конфигурации, он автоматически начинается, что вы сказали, чтобы посмотреть. Единорог, вероятно, уже работает, поэтому он бросает ошибку.

Проверьте это, запустив god status Как только вы начали Бога. Если это не так, вы можете проверить в командной строке, что является статусом выхода Comand:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D; echo $?;

Это echo будет распечатать состояние выхода последней команды. Если это ноль, последняя команда не сообщила о ошибках. Попробуйте запустить Unicorn дважды подряд, я ожидаю во второй раз, когда он вернется 1, потому что он уже работает.

РЕДАКТИРОВАТЬ:

Включая фактическое решение от комментариев, как это кажется популярным ответом:

Вы можете установить явный пользователь и группу, если ваш процесс требует запуска в качестве определенного пользователя.

God.watch do |w|
  w.uid = 'root'
  w.gid = 'root'

  # remainder of config
end

Другие советы

Моя проблема заключалась в том, что я никогда не входил в корне. Вот что я сделал:

sudo bash
cd RAILS_ROOT
bundle

Вы получаете предупреждение, говорящие вам никогда не делать этого:

Не бегайте Bundler как root. Bundler может попросить Sudo, если это необходимо, и установка вашего пучка в качестве корня сломает это приложение для всех пользователей без root на этой машине.

Но это был единственный способ, которым я мог бы получить рессте или единорог, чтобы бежать с Богом. Это было на экземпляре EC2, если это поможет кому-либо.

Добавить опцию журнала помогло мне значительно в отладке.

God.watch do |w|
  w.log = "#{RAILS_ROOT}/log/god.log"

  # remainder of config
end

В конце концов, моя ошибка оказалась start_script в Боге был казнен в development окружающая обстановка. Я исправил это, добавив RAILS_ENV к началу сценария.

start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top