Использование Бога для мониторинга Единорога - начало выхода с ненулевым кодом = 1 - PullRequest
42 голосов
/ 07 октября 2010

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

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

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

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

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

Ответы [ 3 ]

14 голосов
/ 07 октября 2010

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

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

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

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

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

EDIT:

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

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

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

  # remainder of config
end
0 голосов
/ 30 мая 2016

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

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"
0 голосов
/ 28 октября 2014

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

sudo bash
cd RAILS_ROOT
bundle

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

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

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

...