我从这个 NRPE 测试中得到了同样的旧Unable to read output
消息。我可以在这台机器上运行其他测试,也可以su - nagios -c "<path to check_aacraid>"
在本地运行,而且它可以正常工作。
查看/var/log/messages
表明该过程已打开并启动 - 但它似乎没有返回 NRPE 可以消化的任何消息。
我还可以使用什么来调试它?我已经设置好了debug = 1
,nrpe.cfg
并且我已经将 nagios 设置sudo
为NOPASSWD:ALL
。(是的,这是一个很大的安全漏洞。。我迫切希望让它工作)
两个系统(nagios 服务器和 NRPE 客户端)都是 CentOS 6.2。
编辑:
为了从 Nagios 服务器进行测试,我一直使用命令行:
/usr/local/nagios/libexec/check_nrpe -H <IP of nrpe machine> -c check_aacraid
如果我尝试check_users
或check_total_procs
(NRPE 安装附带的默认值),则此操作可以正常工作。如果我将其中一个命令重命名为并将其与tostuff
一起传递,它也可以正常工作。这使我相信问题不是服务器端 nagios。-c
check_nrpe
在客户端,我所做的唯一更改NRPE.CFG
(测试之外 - 参见上文)是添加一行:
command[check_aacraid]=/usr/local/sbin/check-aacraid.py
否则一切都是默认的。
我可以在以 身份登录时执行此命令,nagios
也可以通过 执行su - nagios -c "cmd"
。
答案1
我想说的是,PATH
交互式 shell 中的 很长,包含了check_aacraid
所需的一切,但 NRPEPATH
很短,缺少一些你需要的东西。选择你最喜欢的方法来增强PATH
,check_aacraid
很有可能你所有的问题都会消失。
另外,NRPE 的一般诊断方法是查看strace -f -s 1024
NRPE 服务器的 PID,然后观察会发生什么。通常,问题很明显。
答案2
脚本中的 sudo 可能失败,因为 NRPE 运行时它不在 tty 上。检查 /etc/sudoers 以查找:
Default requiretty
并将其注释掉。
答案3
问题原来出在 SELinux 上。当我“echo 0 /selinux/enforce”时,插件就可以正常工作。现在要弄清楚如何与系统协同工作,而不是绕过系统。
答案4
您可能已经尝试过此方法,但我在使用另一个插件时也遇到了同样的问题。我这边的解决方案是将此行添加到nrpe.cnf
:
command[check_aacraid]=sudo /usr/local/sbin/check-aacraid.py
在sudoers
文件中:
nagios ALL=NOPASSWD:/usr/local/bin/check-aacraid.py
除了您提到的默认注释掉之外,requiretty
已经完成了。