Я пытаюсь запустить несколько плагинов 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.