web-dev-qa-db-ja.com

RVMを使用してRubyで記述されたMuninプラグインを実行するにはどうすればよいですか?

Rubyで書かれたMuninプラグインを実行しようとしています。 RVMを使いたいので、MuninはRubyの場所を知る必要があります。 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実行可能ファイルの実際のパスに変更すると機能しますが、RVM環境は「/ usr/bin/envRuby」が機能するように設定する必要があります。プラグインをrootとして実行します。

何か案は?

更新1

Muninはプラグインの実行時に環境をリセットするように見えるので、プラグインのシバンをRVMラッパースクリプトに設定しようとしました。

rvm wrapper 1.9.2@munin munin

現在、変数名にいくつかの「コマンドが見つかりません」というエラーが表示されます。これは、プラグインがRubyではなくシェルによって解釈されることを意味します。

アップデート2

シンボリックリンクrvmの代わりにラッパースクリプトをコピーすると、作成されて追加されます

source /usr/local/lib/rvm

どちらも役に立ちません。

2
rausch

私はついにそれを理解しました。私がこれまでにしたことをすべて忘れて、この仕事をしようとしています。でラッパースクリプトを作成した後

rvm wrapper 1.9.2@munin munin

//etc/munin/plugin-conf.d/munin-nodeの問題のプラグインの構成にcommand属性を追加するだけで済みました。

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

これで、munin gemsetを使用するか、プラグインごとに個別のgemsetを作成できます。

2
rausch

エラーメッセージが示すように、envは引数Rubyで呼び出されていますが、実行するRuby)と呼ばれるものが見つかりません。が実行されると、パスが正しく設定されてRuby実行可能ファイルが見つかりません。これは/ usr/local/lib/rvmで構成されていると思います。cronjobの外部で実行してみてください。機能しますか。 ? 例えば:

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

また、-x引数を指定してbashを呼び出して、すべてのコマンドを実行時にstderrに出力するようにしてください(bash -xc 'blah')。これは、問題が発生している場所を特定するのに役立ちます。

/ usr/local/lib/rvmをgrepして、envを呼び出している場所を確認し、そこから戻って、envが呼び出されたときに$ PATHが正しく設定されない理由を判別します。

1
Phil Hollenback