我尝试运行一些用Ruby编写的Munin插件。 我想使用RVM,所以Munin需要知道在哪里可以findRuby。 我试图改变在cron文件中调用munin-cron的行,如下所示:
*/5 * * * * munin bash -c 'source /usr/local/lib/rvm && rvm 1.9.2@munin && /usr/bin/munin-cron'
这导致在munin-node.log中的错误消息,说
/usr/bin/env: ruby: No such file or directory
当我将插件的版本更改为Ruby可执行文件的实际path时,它的工作原理是,应该设置RVM环境以便'/ usr / bin / env ruby'工作。 当我以root身份执行插件时,它会执行。
有任何想法吗?
更新1
由于Munin似乎在执行插件时重置了环境,我试图将插件的shebangs设置为RVM包装器脚本,
rvm wrapper 1.9.2@munin munin
现在我在variables名上得到了几个“command not found”错误,这意味着插件现在由shell而不是Ruby来解释。
更新2
复制包装脚本而不是符号链接rvm创build并添加
source /usr/local/lib/rvm
也没有帮助。
我终于弄明白了。 忘记我到目前为止所做的一切,试图做到这一点。 在创build包装脚本之后
rvm wrapper 1.9.2@munin munin
我只需要将命令属性添加到/etc/munin/plugin-conf.d/munin-node中的插件configuration中:
[my_plugin] group rvm command /usr/local/rvm/bin/munin_ruby %c
现在我可以使用我的munin gemset或为每个插件创build一个单独的gemset。
就像错误消息所说的, env正在被ruby调用,但是它找不到任何叫做ruby的东西来执行。 这意味着当env运行时,path没有正确设置来查找ruby可执行文件。 我假设在/ usr / local / lib / rvm中configuration。 尝试在cronjob之外运行它,它工作吗? 例如:
bash -c 'source /usr/local/lib/rvm rvm 1.9.2@munin && /usr/bin/munin-cron'
尝试使用-x参数调用bash,以便在执行命令时将所有命令输出到stderr( bash -xc 'blah' )。 这应该可以帮助你找出哪里出了问题。
grep通过/ usr / local / lib / rvm并查看它调用env的位置,然后从那里返回,以确定在调用env时为什么没有正确设置$ PATH。