How to run Munin plugins written in Ruby, using RVM

muninrubyrvm

I try to run some Munin plugins written in Ruby. I would like to use RVM, so Munin needs to know where to find Ruby. I tried to change the line calling munin-cron in the cron file as follows:

*/5 * * * *     munin bash -c 'source /usr/local/lib/rvm && rvm 1.9.2@munin && /usr/bin/munin-cron'

This leads to error messages in munin-node.log, saying

/usr/bin/env: ruby: No such file or directory

When I change the plugins' shebangs to the actual path of the Ruby executable it works, but the RVM environment should be set so that '/usr/bin/env ruby' works. It does when I execute the plugins as root.

Any ideas?

Update 1

Since Munin seems to reset the environment when executing the plugins, I tried to set the plugins' shebangs to the RVM wrapper script, I created with

rvm wrapper 1.9.2@munin munin

Now I get several "command not found" errors on variable names, implying that the plugins now are interpreted by the shell instead of Ruby.

Update 2

Copying the wrapper script instead of the symlink rvm creates and adding

source /usr/local/lib/rvm

doesn't help either.

Best Answer

I finally figured it out. Forget everything I did so far, trying to make this work. After creating the wrapper script with

rvm wrapper 1.9.2@munin munin

I only had to add the command attribute to the configuration of the plugin in question in /etc/munin/plugin-conf.d/munin-node:

[my_plugin]
group rvm
command /usr/local/rvm/bin/munin_ruby %c

Now I can use my munin gemset or create a separate gemset for each plugin.