我已经完成了一个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 }
答案 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名称,如果使用的话)