Получение “неспособного к статистике//пакет (Никакой такой файл или каталог)” даже при том, что файл существует

Я надеюсь, что это - просто проблема с моим не понимание, как переменная $PATH работает. Я использую Ubuntu 14.04. Я пытаюсь выполнить направляющие через сервер единорога. Я имею ниже конфигурации для моего сервера единорога

# Change parameters below to appropriate values and set CONFIGURED to yes.
CONFIGURED=yes

# Default timeout until child process is killed during server upgrade,
# it has *no* relation to option "timeout" in server's config.rb.
TIMEOUT=60

# Path to your web application, sh'ld be also set in server's config.rb,
# option "working_directory". Rack's config.ru is located here.
APP_ROOT=/home/rails/mydomain

# Server's config.rb, it's not a rack's config.ru
CONFIG_RB=/etc/unicorn.conf

# Where to store PID, sh'ld be also set in server's config.rb, option "pid".
PID=/var/run/unicorn.pid
RAILS_ENV="production"
UNICORN_OPTS="-D -c $CONFIG_RB -E $RAILS_ENV"

export GEM_HOME=/home/rails/.gem
export GEM_PATH=$GEM_HOME/ruby/2.4.0
PATH=$GEM_HOME/bin:/usr/local/rvm/rubies/ruby-2.4.0/bin/:/usr/local/sbin:/usr/bin:/bin:/sbin:/usr/local/rvm/bin
which bundle
cd $APP_ROOT
DAEMON="bundle exec $GEM_PATH/bin/unicorn"

Когда я иду для выполнения моего сервера единорога, я получаю эту ошибку

myuser@mydomain:~$ sudo service unicorn restart
/home/rails/.gem/bin/bundle
 * Restarting Unicorn web server unicorn 

 start-stop-daemon: unable to stat //bundle (No such file or directory)

Почему это жалуется на "пакет (Никакой такой файл или каталог)", когда я просто распечатал это в "который" оператор? Очевидно пакет файла существует. Я включал свой/etc/init.d/unicorn файл ниже, если это полезно.

#!/bin/sh
### BEGIN INIT INFO
# Provides:          unicorn
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: unicorn initscript
# Description:       unicorn
### END INIT INFO

set -e
NAME=unicorn
DESC="Unicorn web server"

. /lib/lsb/init-functions

if [ -f /etc/default/unicorn ]; then
  . /etc/default/unicorn
fi

PID=${PID-/run/unicorn.pid}

run_by_init() {
    ([ "${previous-}" ] && [ "${runlevel-}" ]) || [ "${runlevel-}" = S ]
}

exit_with_message() {
  if ! run_by_init; then
    log_action_msg "$1 Not starting."
  fi
  exit 0
}

check_config() {
  if [ $CONFIGURED != "yes" ]; then
    exit_with_message "Unicorn is not configured (see /etc/default/unicorn)."
  fi
}

check_app_root() {
  if ! [ -d $APP_ROOT ]; then
    exit_with_message "Application directory $APP_ROOT is not exist."
  fi
}

set -u

case "$1" in
  start) 
        check_config
        check_app_root

        log_daemon_msg "Starting $DESC" $NAME || true
        if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" $NAME || true
        if start-stop-daemon --stop --signal QUIT --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  force-stop)
        log_daemon_msg "Forcing stop of $DESC" $NAME || true
        if start-stop-daemon --stop --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" $NAME || true
        start-stop-daemon --stop --quiet --oknodo --pidfile $PID
        sleep 1
        if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  reload)
        log_daemon_msg "Reloading $DESC" $NAME || true
        if start-stop-daemon --stop --signal HUP --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  reopen-logs)
        log_daemon_msg "Relopening log files of $DESC" $NAME || true
        if start-stop-daemon --stop --signal USR1 --quiet --oknodo --pidfile $PID; then
          log_end_msg 0 || true
        else
          log_end_msg 1 || true
        fi
        ;;
  status)
        status_of_proc -p $PID $DAEMON $NAME && exit 0 || exit $?
        ;;
  *)
        log_action_msg "Usage: $0 <start|stop|restart|force-reload|reload|force-stop|reopen-logs|status>" || true
        exit 1
        ;;
esac
2
задан 9 April 2017 в 20:53

1 ответ

Причина состоит в том, что путь выполнения, переданный start-stop-daemon, должен быть полностью определен. Фиксация должна установить

DAEMON="/path/to/bundle exec $GEM_PATH/bin/unicorn"

, можно протестировать это использование этого простого примера

$ sudo start-stop-daemon --start --oknodo --user lathiat --pidfile /tmp/pid1 --exec sleep 60 -- 
[sudo] password for lathiat: 
start-stop-daemon: unable to stat //sleep (No such file or directory)

$ sudo start-stop-daemon --start --oknodo --user lathiat --pidfile /tmp/pid1 --exec /bin/sleep 60 -- 
1
ответ дан 2 December 2019 в 04:49

Другие вопросы по тегам:

Похожие вопросы: