Я пытаюсь использовать Bluepill для перезапуска Unicorn на случай, если он выйдет из строя и не сможет заставить меня работать. Запуск Unicorn вручную работает отлично.
Я даю команды Bluepill следующим образом: bundle exec bluepill --no-privileged <some command>
Вот что пишет журнал Bluepill при попытке запустить Unicorn:
WARN -- : [myapp:unicorn] Executing start command: /etc/init.d/unicorn_myapp start
WARN -- : [myapp:unicorn] Start command execution returned non-zero exit code:
WARN -- : [myapp:unicorn] {:stdout=>"", :stderr=>"/etc/init.d/unicorn_myapp: 24: kill: No such process\n\nmaster failed to start, check stderr log for details\n", :exit_code=>1}
Он ссылается на строку 24 моего сценария оболочки Unicorn, которая выглядит так:
PID=$APP_ROOT/tmp/pids/unicorn.pid
# ...other stuff here...
sig () {
test -s "$PID" && kill -$1 `cat $PID` # this is line 24
}
Когда я смотрю в журнале ошибок Unicorn, я вижу это:
INFO -- : Refreshing Gem list
bundler: failed to load command: unicorn_rails (/home/deployer/apps/myapp/shared/bundle/ruby/2.2.0/bin/unicorn_rails)
LoadError: cannot load such file -- sass-rails
Вручную, я могу перезапустить Unicorn несколькими способами:
/etc/init.d/unicorn_myapp start
bundle exec unicorn_rails -c config/unicorn.rb -D
Он выводит /etc/init.d/unicorn_myapp: 24: kill: No such process
, но, несмотря на это, он срабатывает нормально.
Конфигурация Bluepill:
app_home = "/home/deployer/apps/myapp"
Bluepill.application("myapp", log_file: "#{app_home}/shared/log/bluepill.log") do |app|
app.uid = "deployer"
app.gid = "deployer"
app.process("unicorn") do |process|
process.working_dir = "#{app_home}"
process.start_grace_time = 60.seconds
process.stop_grace_time = 60.seconds
process.restart_grace_time = 60.seconds
process.start_command = "/etc/init.d/unicorn_myapp start"
process.stop_command = "start-stop-daemon --signal QUIT --stop --pidfile #{app_home}/current/tmp/pids/unicorn.pid"
process.pid_file = "#{app_home}/current/tmp/pids/unicorn.pid"
end
end
Я должен отметить, что я успешно могу отслеживать, останавливать и запускать delayed_job с Bluepill. Я также могу контролировать и останавливать Unicorn, но не могу его запустить.
В случае, если это имеет значение, я использую RVM.