在远程ruby脚本中使用特定的ruby版本

时间:2015-04-21 13:19:17

标签: ruby linux

我有一个脚本。它由一个sensu服务器客户端运行。 这是进程

ps aux |grep sensu
sensu    18171  0.0  1.3 134716 24044 ?        Sl   12:50   0:00 /opt/sensu/embedded/bin/ruby /opt/sensu/bin/sensu-client -b -c /etc/sensu/config.json -d /etc/sensu/conf.d -e /etc/sensu/extensions -p /var/run/sensu/sensu-client.pid -l /var/log/sensu/sensu-client.log -L info

这是脚本的第一行:

#! /usr/local/rvm/rubies/ruby-2.1.3/bin/ ruby

我想知道如何强制客户端使用特定的ruby版本

尝试:

rvm use 2.1.3

在root用户下的~/.bashrc文件中。我没有sensu用户..

我的感觉说:

sh: 1: /etc/sensu/plugins/cpu_check.rb: Permission denied

编辑:

删除第一行的间隔,如下所示: #!/usr/local/rvm/rubies/ruby-2.1.3/bin/ruby 现在我得到了 /usr/local/rvm/rubies/ruby-2.1.3/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in要求':无法加载此类文件 - sensu-plugin / check / cli(LoadError)`

但已安装:

$: ls /usr/local/rvm/gems/ruby-2.1.3/gems/
mixlib-cli-1.5.0  sensu-plugin-1.1.0

1 个答案:

答案 0 :(得分:0)

实现目标的常用方法是使用脚本包装器:

#!/bin/bash

if [ -z $1 ] ; then
  echo "Please specify ruby version to use. Exiting..."
  exit 1
end

if [ ! -f /usr/local/rvm/environments/ruby-$1 ] ; then
  echo "Please specify correct ruby version to use. Exiting..."
  exit 2
end

if [ -z $2 ] ; then
  echo "Please specify ruby script to execute. Exiting..."
  exit 3
end

source /usr/local/rvm/environments/ruby-$1
ruby "$@"

用法:

script.sh 2.1.3 /etc/sensu/plugins/cpu_check.rb

希望它有所帮助。