Графана / Телеграф / Рубин / RVM: пользователь телеграфа не может найти рубиновый путь - PullRequest
0 голосов
/ 15 ноября 2018

По умолчанию служба telegraf запускается под пользователем telegraf: telegraf

[esantos@localhost telegraf]$ systemctl status telegraf
● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
   Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-11-15 06:01:30 EST; 3h 16min ago
     Docs: https://github.com/influxdata/telegraf
 Main PID: 114362 (telegraf)
   CGroup: /system.slice/telegraf.service
           └─114362 /usr/bin/telegraf -config /etc/telegraf/telegraf.conf -config-directory /etc/telegraf/telegraf.d

Nov 15 06:01:30 localhost.localdomain systemd[1]: Started The plugin-driven server agent for reporting metrics into InfluxDB.
Nov 15 06:01:30 localhost.localdomain systemd[1]: Starting The plugin-driven server agent for reporting metrics into InfluxDB...

У пользователя telegraf нет оболочки

[esantos@localhost telegraf]$ cat /etc/passwd | grep telegraf
telegraf:x:996:994::/etc/telegraf:/bin/false

Теперь проблема ... конфигурацияговорит телеграфу запустить скрипт ruby, который будет возвращать объект JSON

[esantos@localhost telegraf]$ cat /etc/telegraf/telegraf.d/groove.conf
[[inputs.exec]]
  commands = ["ruby /etc/telegraf/pm_collector.rb"]

Все отлично работает с таким пользователем, как esantos - SUCCESS

К сожалению, не работает для службы телеграфа, работающей как пользователь телеграфа, возвращая "ruby": executable file not found in $PATH" - FAIL

[esantos@localhost telegraf]$ sudo -u telegraf telegraf --config /etc/telegraf/telegraf.d/groove.conf --test
2018-11-15T14:19:08Z E! Error in plugin [inputs.exec]: exec: exec: "ruby": executable file not found in $PATH for command 'ruby /etc/telegraf/pm_collector.rb'

Открытие оболочкикак пользователь телеграфа также работает - УСПЕХ

[esantos@localhost telegraf]$ sudo -u telegraf /bin/bash
bash-4.2$ cat .bashrc
source /usr/local/rvm/scripts/rvm
bash-4.2$ cat .bash_profile
source /usr/local/rvm/scripts/rvm
bash-4.2$
bash-4.2$ rvm -v
rvm 1.29.4 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]
bash-4.2$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
bash-4.2$ gem -v
2.7.8
bash-4.2$ echo $PATH
/usr/local/rvm/gems/ruby-2.5.1/bin:/usr/local/rvm/gems/ruby-2.5.1@global/bin:/usr/local/rvm/rubies/ruby-2.5.1/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin
bash-4.2$ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.8
  - RUBY VERSION: 2.5.1 (2018-03-29 patchlevel 57) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.5.1
  - USER INSTALLATION DIRECTORY: /etc/telegraf/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.5.1/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.5.1/bin
  - SPEC CACHE DIRECTORY: /etc/telegraf/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /usr/local/rvm/rubies/ruby-2.5.1/etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/rvm/gems/ruby-2.5.1
     - /usr/local/rvm/gems/ruby-2.5.1@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/rvm/gems/ruby-2.5.1/bin
     - /usr/local/rvm/gems/ruby-2.5.1@global/bin
     - /usr/local/rvm/rubies/ruby-2.5.1/bin
     - /sbin
     - /bin
     - /usr/sbin
     - /usr/bin
     - /usr/local/rvm/bin

Может ли это быть связано с входом в систему без входа в оболочку?Как это преодолеть?Мы могли бы рассмотреть этот вопрос в более широком контексте.Как запустить скрипт ruby ​​в многопользовательской установке RVM, используя пользователя без оболочки?

1 Ответ

0 голосов
/ 20 ноября 2018

Хитрость в том, чтобы добавить /bin/bash --login к команде, которую мы хотим запустить.Таким образом, оболочка входа в систему противопоставляется и вызываются сценарии инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...