Использование стандарта unicorn_init.sh для загрузки приложения rails

#linux #bash #ruby-on-rails-4

#linux #bash #ruby-on-rails-4

Вопрос:

У меня есть стандартный unicorn_init.sh файл, связанный с моим /etc /init.d

 #!/bin/sh
set -e
# Example init script, this can be used with nginx, too,
# since nginx and unicorn accept the same signals

# Feel free to change any of the following variables for your app:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=<APP HOME DIRECTORY>
PID=$APP_ROOT/tmp/pids/unicorn.pid
CMD="cd $APP_ROOT; $APP_ROOT/bin/unicorn -D -c $APP_ROOT/config/unicorn.rb -E production"
action="$1"
set -u

old_pid="$PID.oldbin"

cd $APP_ROOT || exit 1

sig () {
        test -s "$PID" amp;amp; kill -$1 `cat $PID`
}

oldsig () {
        test -s $old_pid amp;amp; kill -$1 `cat $old_pid`
}

case $action in
start)
        sig 0 amp;amp; echo >amp;2 "Already running" amp;amp; exit 0
        su -c "$CMD" - <USER>
        ;;
stop)
        sig QUIT amp;amp; exit 0
        echo >amp;2 "Not running"
        ;;
force-stop)
        sig TERM amp;amp; exit 0
        echo >amp;2 "Not running"
        ;;
restart|reload)
        sig HUP amp;amp; echo reloaded OK amp;amp; exit 0
        echo >amp;2 "Couldn't reload, starting '$CMD' instead"
        su -c "$CMD" - <USER>
        ;;
upgrade)
        if sig USR2 amp;amp; sleep 2 amp;amp; sig 0 amp;amp; oldsig QUIT
        then
                n=$TIMEOUT
                while test -s $old_pid amp;amp; test $n -ge 0
                do
                        printf '.' amp;amp; sleep 1 amp;amp; n=$(( $n - 1 ))
                done
                echo

                if test $n -lt 0 amp;amp; test -s $old_pid
                then
                        echo >amp;2 "$old_pid still exists after $TIMEOUT seconds"
                        exit 1
                fi
                exit 0
        fi
        echo >amp;2 "Couldn't upgrade, starting '$CMD' instead"
        su -c "$CMD" - <USER>
        ;;
reopen-logs)
        sig USR1
        ;;
*)
        echo >amp;2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
        exit 1
        ;;
esac
  

Говоря

 service unicorn_<APP NAME> start
  

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

 service unicorn_<APP NAME> stop
  

Я получаю сообщение об ошибке из файла «Не запущен», пытаюсь перезапустить

 service  unicorn_<APP_NAME> restart
  

Я получаю сообщение об ошибке:

 Couldn't reload, starting 'cd <APP_NAME>; <APP_NAME>/bin/unicorn -D -c <APP_NAME>/config/unicorn.rb -E production' instead
master failed to start, check stderr log for details
  

Я думаю, это потому, что он теряет отслеживание pid для рабочих процессов и проверяет область / tmp / pid unicorn.pid не существует, и если я создам пустой, это не будет иметь значения.

Приветствуется любая помощь.

Комментарии:

1. Вам не нужно заменять <APP_HOME_DIRECTORY> в строке 8 реальный каталог установки вашего приложения?

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

3. Tbh Я понятия не имею о unicorn, однако в документации здесь не упоминается, что записан pid-файл. Однако для unicorn_rails это, похоже, имеет место. Так что, может быть, вам нужно использовать unicorn_rails вместо unicorn?