Как перезапустить единорог вручную

Я не уверен, что единорог перезагружается должным образом, когда я запускаю cap deploy, поскольку определенные изменения не отображаются в приложении, поэтому я хотел перезапустить единорог вручную на моем удаленном сервере. Я перешел в etc/init.d и просмотрел список для unicorn_myapp, но это не каталог (т.е. Я не могу его записать). Основываясь на приведенном ниже коде из моего файла deploy.rb, есть ли что-то, что я могу сделать здесь, чтобы перезапустить единорог?

Я пытался сделать run unicorn_myapp restart, но сказал, что run не является командой

namespace :deploy do
  %w[start stop restart].each do |command|
    desc "#{command} unicorn server"
    task command, roles: :app, except: {no_release: true} do
      run "/etc/init.d/unicorn_#{application} #{command}"
    end
  end

Ответ 1

вы не указали ОС. но одно из следующего должно работать.

вам нужно будет root/use sudo

/etc/init.d/unicorn_myapp restart 


/etc/init.d/unicorn_myapp stop 
/etc/init.d/unicorn_myapp start 


service unicorn_myapp restart

service unicorn_myapp stop
service unicorn_myapp start

Сначала попробуйте перезапустить версии, но в зависимости от того, как было записано init script, у него может не быть команды перезапуска, если это не сработает, вы можете сделать версию stop/start.

Ответ 2

В качестве альтернативы вместо того, чтобы полагаться на сценарии /etc/init.d..., которые зависят от ОС, простой способ перезапуска единорога - отправить сигнал HUP (1) в его главный процесс.

Вот, например, как я перезагружаю приложение автоматически после git push через post-receive hook:

#!/bin/sh
unicorn_pid=`cat /tmp/pids/unicorn.pid`
echo "Restarting Unicorn ($unicorn_pid)"
kill -HUP $unicorn_pid

В вашем случае /etc/init.d/unicorn_myapp restart script, вероятно, это сделает. Проверьте unicorn.conf на расположение своего pidfile.

Подробнее см. документация единорога SIGNALS

Ответ 3

Возможно, вам придется быть root, но это должно быть только /etc/init.d/unicorn_myapp restart (не включайте run, который не является командной оболочкой).