Проблемы PATH для сценариев init.d при запуске

8

У меня есть простой скрипт, который запускает экземпляр единорога (на Ubuntu 12.04LTS).

#!/bin/sh

case "$1" in
    start)
       echo "starting"
       cd /path && bundle exec unicorn -c /path/config/unicorn.rb -D -E production
      ;;
     stop)
      echo "Stopping Unicorn Instances"
      kill `cat /tmp/unicorn.pid`
    ;;
    restart)
    echo "sending USR2 to all unicorns"
    kill -s USR2 `cat /tmp/unicorn.pid`
    ;;
esac
exit 0

Он ведет себя правильно, когда вызывается: /etc/init.d/unicorn_boot.sh start

Я хочу, чтобы он запускался при загрузке, поэтому я запустил: update-rc.d -f unicorn_boot.sh defaults

Когда я сейчас перезагружаюсь, я получаю следующую ошибку:

/etc/rc2.d/S20unicorn_boot.sh: 10: /etc/rc2.d/S20unicorn_boot.sh: bundle: not found

Я проверил bundleкоманду, и она установлена /usr/local/bin, то же самое для rubyкоманды.

Похоже, что при загрузке PATHеще не включает /usr/local/bin. Как я могу это исправить?

Peterdk
источник

Ответы:

9

Initscripts ответственен за установление соответствующего пути самостоятельно. Установите $PATHпеременную в верхней части скрипта:

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
mgorven
источник
Хорошо, спасибо. Не знал этого. Это исправлено сейчас!
Peterdk
В качестве альтернативы вы должны иметь возможность PATH="$PATH:/usr/local/bin"добавлять необходимые переменные в переменную, а не переопределять переменную $ PATH полностью.
Jaseeey
Использование внешней переменной $ PATH представляет собой угрозу безопасности. Не добавляйте существующий путь! Создайте свой собственный с точным списком, который вам нужен.
Брендан Берд