需要在Init.d脚本中

时间:2016-06-15 16:13:31

标签: ruby init.d

我已经完成了一个init.d脚本,以便将一个新的插件作为守护进程启动。问题是,当我运行service rb_nr_agent start时,它会出现一些与" require"相关的错误。输出:

[root@device newrelic_rb_plugin]# /usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- snmp (LoadError)
from /usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /opt/newrelic_rb_plugin/newrelic_redborder_agent:5:in `<main>'  

[root@device newrelic_rb_plugin]# ./rb_nr_agent start Starting rb_nr_agent:[ OK ]

它没有正确启动。当我运行相同的脚本但在项目的根路径中它没有任何错误,它工作正常。 init.d是该副本的副本。这里有脚本的开始选项:

start() {
    RESULT=`ps aux | grep $executable | grep -c -v grep`
    if [ "${RESULT:-null}" -ge "1" ]; then
      echo "$prog is currently running"
    else
      echo -n "Starting $prog: "
      /opt/newrelic_rb_plugin/newrelic_redborder_agent > /dev/null &
      RETVAL=$?
      if [ $RETVAL -eq 0 ]; then
       echo_success
      else
       echo_failure; failure
       RETVAL=1
      fi
      echo
    fi 
    return $RETVAL }

1 个答案:

答案 0 :(得分:1)

错误文本表明您正在使用RVM,但它仅在用户登录时加载,因此默认情况下在init-scripts中不可用。

使用rvm do运行启用了rvm的命令:

/usr/local/rvm/bin/rvm ruby-2.1.2 do /opt/newrelic_rb_plugin/newrelic_redborder_agent > /dev/null &

(您可能需要更正确切安装的ruby版本和gemset名称,如果使用的话)