我这里的这个脚本在本地工作得很好:
#! /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 的价值,但为什么这只能在本地工作而不能远程工作?是否可以在没有临时文件的情况下制作它?
答案1
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