为什么这个 Bash NRPE 插件不向 Nagios 返回变量?

为什么这个 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 的价值,但为什么这只能在本地工作而不能远程工作?是否可以在没有临时文件的情况下制作它?

答案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

相关内容