#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?