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
どちらも役に立ちません。
私はついにそれを理解しました。私がこれまでにしたことをすべて忘れて、この仕事をしようとしています。でラッパースクリプトを作成した後
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を作成できます。
エラーメッセージが示すように、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が正しく設定されない理由を判別します。