nrpe用户不能正确执行脚本使用lsof远程执行,netstat工程

我为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_nrpelsof的问题。 但我永远无法在日志中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 

必要时用nrpereplacenagiosnrpe在必要时修改lsof的path。