我为nagios创build了一个简单的脚本来检查远程服务器上的端口。 本来我试图用lsof 。
#!/bin/bash RESULT=$(lsof -i :8080 | grep LISTEN) if [ -n "$RESULT" ] then echo "$RESULT" exit 0 else echo "Check application port is down" exit 2 fi
在本地机器上,nagios用户可以运行并执行脚本并获得预期的输出。 但远程使用check_nrpe ,我总是得到其他的回声
Check application port is down
即使正如我所说的在本地运行脚本,它正常工作
nrpe用户拥有执行该脚本所需的所有权限,SELinux处于宽容模式,但是我永远无法使其工作。 所以我改变了RESULT行来使用netstat 。
RESULT=$(netstat -anp | grep ":8080" | grep LISTEN)
然后我可以使用check_nrpe远程获得预期的响应。 所以我认为这是check_nrpe和lsof的问题。 但我永远无法在日志中find任何东西。
任何人有任何想法或build议,以使这与lsof正确工作?
非root用户不会看到来自lsof -i任何输出。 (在Debian 8和Cent 7上确认,没有SELinux。)
如果你想在一个nagios检查中使用它,你必须通过sudo运行lsof。
如果将sudoconfiguration为需要tty(可能是CentOS上的默认configuration),则可以这样做:
Defaults:nagios !requiretty nagios ALL=NOPASSWD:/usr/bin/lsof
必要时用nrpereplacenagios , nrpe在必要时修改lsof的path。