启动时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。我怎样才能解决这个问题?

Answers:


9

初始化脚本负责自己设置适当的路径。$PATH在脚本顶部设置变量:

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

好,谢谢。不知道 现在已修复!
Peterdk

另外,您应该能够设置PATH="$PATH:/usr/local/bin"将所需的路径追加到变量,而不是完全覆盖$ PATH变量。
jaseeey 2015年

依靠外部$ PATH会带来安全风险。不要添加现有的路径!使用所需的确切列表创建自己的列表。
布伦丹·伯德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.