Shell-Script

為什麼這個 Bash NRPE 外掛不向 Nagios 返回變數?

  • March 20, 2019

我在這裡的這個腳本在本地工作得很好:

#! /bin/bash
volts=`sudo vcgencmd measure_volts core|sed 's/volt=\([0-9\.]*\)V/\1/'`
echo -n "BCM2835 SoC Voltage is ${volts}V "
echo "| volts=$volts;1.5;1.5;0;1.5"

但是,如果 Nagios 嘗試獲取資訊,它只會得到“BCM2835 SoC 電壓為 V”,就好像未定義變數一樣。

還有其他外掛可以從文件中提取資訊並且可以正常工作。所以我設法將資訊寫入臨時文件並將其寫回變數中。

#! /bin/bash
sudo vcgencmd measure_volts core|sed 's/volt=\([0-9\.]*\)V/\1/'>/tmp/volts
volts=$(</tmp/volts)
echo -n "BCM2835 SoC Voltage is ${volts}V "
echo "| volts=$volts;1.5;1.5;0;1.5"

現在我可以看到 Nagios 中的值,但是為什麼這只能在本地工作而不是在遠端工作呢?是否可以在沒有臨時文件的情況下製作它?

Nagios 執行的使用者需要sudo權限,就像您的普通帳戶一樣。您可以使用這樣的命令來查看sudo使用者擁有什麼權限:

$ su - nagios -c "sudo -l"
Matching Defaults entries for nagios on this host:
   requiretty, !visiblepw, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS MAIL PS1 PS2 QTDIR USERNAME LANG
   LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME
   LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", !requiretty

User nagios may run the following commands on this host:
   (root) NOPASSWD: /etc/init.d/nagios* restart
   (root) NOPASSWD: /etc/init.d/nagios restart
   (root) NOPASSWD: /etc/init.d/nagios* reload
   (root) NOPASSWD: /etc/init.d/nagios reload
   (root) NOPASSWD: /usr/bin/nagios* -v *
   (root) NOPASSWD: /usr/bin/nagios -v *
   (root) NOPASSWD: /usr/bin/nagios* -s *
   (root) NOPASSWD: /usr/bin/nagios -s *
   (root) NOPASSWD: /etc/init.d/snmptrapd restart
   (root) NOPASSWD: /etc/init.d/centstorage restart
   (root) NOPASSWD: /etc/init.d/centstorage stop
   (root) NOPASSWD: /etc/init.d/centstorage start

假設 Nagiossudo有權執行您的 volts 命令,vcgencmd measure_volts您還需要確保 sudo 權限類似於上面 Nagios 可以執行該命令的權限,root並且不需要密碼 ( NOPASSWD)。您的/etc/sudoers文件中應該執行以下操作:

nagios   ALL = NOPASSWD: /path/to/vcgencmd measure_volts core

引用自:https://unix.stackexchange.com/questions/86398