我为 nagios 创建了一个简单的脚本来检查远程服务器上的端口。最初,我尝试使用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
,我总是得到 else echo 返回
Check application port is down
尽管正如我所说在本地运行脚本,但它运行正常
nrpe 用户拥有执行脚本所需的所有权限,SELinux 处于宽容模式,但我始终无法让它工作。因此我将 RESULT 行更改为使用netstat
。
RESULT=$(netstat -anp | grep ":8080" | grep LISTEN)
然后我可以使用远程方式获得预期的响应。因此,我假设这是和check_nrpe
的某种问题。但我在日志中找不到任何东西。check_nrpe
lsof
有人有什么想法或建议让它正常工作吗lsof
?
答案1
非 root 用户看不到任何输出lsof -i
。(已在 Debian 8 和 Cent 7 上确认,没有 SELinux。)
如果您想在 nagios 检查中使用它,您必须通过 sudo 运行 lsof。
如果 sudo 配置为需要 tty(可能是 CentOS 上的默认设置),您可以执行以下操作:
Defaults:nagios !requiretty
nagios ALL=NOPASSWD:/usr/bin/lsof
如果有必要,请替换nagios
为,并修改 lsof 的路径。nrpe