Como eu executo os plugins do Munin escritos em Ruby, usando o RVM?

2

Eu tento rodar alguns plugins do Munin escritos em Ruby. Eu gostaria de usar o RVM, então Munin precisa saber onde encontrar o Ruby. Eu tentei mudar a linha chamando munin-cron no arquivo cron da seguinte forma:

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

Isso leva a mensagens de erro no munin-node.log, dizendo

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

Quando eu altero os shebangs dos plugins para o caminho real do executável Ruby ele funciona, mas o ambiente RVM deve ser configurado para que '/ usr / bin / env ruby' funcione. Faz quando eu executo os plugins como root.

Alguma idéia?

Atualização 1

Como Munin parece redefinir o ambiente ao executar os plug-ins, tentei configurar os shebangs dos plug-ins para o script wrapper do RVM, criei com

rvm wrapper 1.9.2@munin munin

Agora eu recebo vários erros de "comando não encontrado" nos nomes das variáveis, sugerindo que os plugins agora são interpretados pelo shell ao invés do Ruby.

Atualização 2

Copiando o script wrapper em vez do symlink rvm cria e adiciona

source /usr/local/lib/rvm

também não ajuda.

    
por rausch 15.01.2011 / 11:25

2 respostas

2

Eu finalmente percebi isso. Esqueça tudo o que fiz até agora, tentando fazer isso funcionar. Depois de criar o script wrapper com

rvm wrapper 1.9.2@munin munin

Eu só tive que adicionar o atributo command para a configuração do plugin em questão em /etc/munin/plugin-conf.d/munin-node:

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

Agora eu posso usar meu gemset munin ou criar um gemset separado para cada plugin.

    
por 18.01.2011 / 09:30
1

Como a mensagem de erro diz, env está sendo chamado com o argumento ruby , mas não pode encontrar nada chamado ruby para executar. Isso significa que quando o env é executado, o caminho não está configurado corretamente para localizar o executável do ruby. Eu suponho que esteja configurado em / usr / local / lib / rvm. Tente executá-lo fora do cronjob, isso funciona? Por exemplo:

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

Tente também chamar bash com o argumento -x para que todos os comandos sejam enviados para stderr conforme são executados ( bash -xc 'blah' ). Isso deve ajudá-lo a descobrir onde as coisas estão indo mal.

Passe por / usr / local / lib / rvm e veja onde está chamando env, e então trabalhe de volta para determinar por que o $ PATH não está configurado corretamente quando env é chamado.

    
por 15.01.2011 / 12:02

Tags