Назад | Перейти на главную страницу

Как запустить плагины Munin, написанные на Ruby, с помощью RVM?

Я пытаюсь запустить несколько плагинов Munin, написанных на Ruby. Я хотел бы использовать RVM, поэтому Мунину нужно знать, где найти Ruby. Я попытался изменить строку вызова munin-cron в файле 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

Когда я меняю shebang плагинов на фактический путь к исполняемому файлу Ruby, он работает, но среда RVM должна быть настроена так, чтобы работала / usr / bin / env ruby. Это происходит, когда я запускаю плагины как root.

Любые идеи?

Обновление 1

Поскольку Munin, кажется, сбрасывает среду при выполнении плагинов, я попытался установить shebang плагинов в сценарий оболочки 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:

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

Теперь я могу использовать свой гемсет munin или создать отдельный гемсет для каждого плагина.

Как говорится в сообщении об ошибке, env вызывается с аргументом ruby, но он не может найти для выполнения ничего, называемого рубином. Это означает, что при запуске env путь для поиска исполняемого файла ruby ​​настроен неправильно. Я предполагаю, что это настроено в / usr / local / lib / rvm. Попробуйте запустить его вне cronjob, он работает? Например:

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

Попробуйте также вызвать bash с аргументом -x, чтобы он выводил все команды на stderr по мере их выполнения (bash -xc 'blah'). Это должно помочь вам понять, где что-то идет не так.

Grep через / usr / local / lib / rvm и посмотрите, где он вызывает env, а затем вернитесь оттуда, чтобы определить, почему $ PATH не установлен правильно при вызове env.