起動時のinit.dスクリプトのPATH問題


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です。どうすれば修正できますか?

回答:


9

Initscriptは、適切なパスを自分で設定する必要があります。$PATHスクリプトの先頭で変数を設定します。

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin

わかりました。それを知りませんでした。修正されました!
Peterdk 2013

またはPATH="$PATH:/usr/local/bin"、$ PATH変数を完全にオーバーライドするのではなく、必要なパスを変数に追加するように設定できるはずです。
jaseeey 2015年

外部の$ PATHに依存することはセキュリティ上のリスクです。既存のPATHを追加しないでください!あなたが必要とする正確なリストであなた自身を作成し​​てください。
ブレンダンバード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.