Shell-Script
為什麼這個 Bash NRPE 外掛不向 Nagios 返回變數?
我在這裡的這個腳本在本地工作得很好:
#! /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
假設 Nagios
sudo
有權執行您的 volts 命令,vcgencmd measure_volts
您還需要確保 sudo 權限類似於上面 Nagios 可以執行該命令的權限,root
並且不需要密碼 (NOPASSWD
)。您的/etc/sudoers
文件中應該執行以下操作:nagios ALL = NOPASSWD: /path/to/vcgencmd measure_volts core