Подтвердить что ты не робот

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

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

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

Это моя команда:

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

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

4b9b3361

Ответ 1

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

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

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

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

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

EDIT:

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

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

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

  # remainder of config
end

Ответ 2

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

sudo bash
cd RAILS_ROOT
bundle

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

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

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

Ответ 3

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

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

  # remainder of config
end

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

start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"