运行从init.d调用的脚本时找不到与rbenv一起安装的ruby

时间:2015-08-19 01:15:18

标签: ruby chef rbenv

我使用厨师部署到测试机器。配方的第一部分是安装rbenv。

下一部分是克隆/web/newrelic_sidekiq_agent下的newrelic_sidekiq_agent git repo

下一部分是从以下模板创建init.d脚本。

APP_PATH=/web/newrelic_sidekiq_agent

. /etc/rc.d/init.d/functions

start() {
  cd $APP_PATH && ./newrelic_sidekiq_agent.daemon start
}

stop() {
  cd $APP_PATH && ./newrelic_sidekiq_agent.daemon stop
}

status() {
  cd $APP_PATH && ./newrelic_sidekiq_agent.daemon status
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: $0 {start|stop|status|restart}"
    exit 1
    ;;
esac

newrelic_sidekiq_agent.daemon的内容是

#!/usr/bin/env ruby

require 'rubygems'
require 'daemons'
require 'bundler/setup'

Daemons.run(File.dirname(Pathname.new(__FILE__).realpath) + '/newrelic_sidekiq_agent')

厨师食谱失败,因为它无法找到红宝石箱。我得到的错误是

Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '127'
---- Begin output of /sbin/service newrelic_sidekiq_agent start ----
STDOUT:
STDERR: /usr/bin/env: ruby: No such file or directory
---- End output of /sbin/service newrelic_sidekiq_agent start ----

登录服务器,我设置了全局ruby版本,然后运行以下内容。

>> rbenv global
2.1.6

>> which ruby
/opt/rbenv/shims/ruby

>> /sbin/service newrelic_sidekiq_agent status
/usr/bin/env: ruby: No such file or directory

>> ./newrelic_sidekiq_agent.daemon status
newrelic_sidekiq_agent: running [pid 25208]

将对ruby的调用更改为使用绝对路径可以使用init.d脚本。

#!/usr/bin/env /opt/rbenv/shims/ruby

有没有办法使它工作,所以我不必使用绝对路径?

0 个答案:

没有答案