You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RHEL环境下Nagios自定义插件异常:CLI正常但WebGUI返回未知状态

解决Nagios执行自定义脚本返回未知状态的问题

看起来你碰到了Nagios自定义脚本的常见坑——命令行跑正常,但Nagios执行就返回未知状态。结合你给出的信息,我帮你梳理几个最可能的原因和解决办法:

1. 脚本语法不完整(最直接的问题)

你提供的脚本内容明显没写完:elif((204800<$rootU...这里截断了,语法不完整的脚本在Nagios执行时会直接报错,导致返回未知状态。先把脚本补全,同时我建议优化下获取目录大小的方式(用awk比cut更可靠,因为du的输出是数字+空格+路径),完整的脚本示例如下:

#!/bin/bash
# 用awk提取du输出的第一个字段(大小,单位KB)
rootUsage=$(/usr/bin/du -s /root | /usr/bin/awk '{print $1}')
output=$rootUsage

if ((rootUsage <= 204800)); then
    echo "OK. root storage is : $output KB"
    exit 0  # Nagios OK状态码
elif ((rootUsage > 204800 && rootUsage <= 409600)); then
    echo "WARNING. root storage is : $output KB"
    exit 1  # Nagios WARNING状态码
else
    echo "CRITICAL. root storage is : $output KB"
    exit 2  # Nagios CRITICAL状态码
fi

2. Nagios用户权限不足(最常见的隐形问题)

默认情况下/root目录的权限是drwx------,只有root用户能访问。你说nagios用户能执行脚本,但要确认它是否能读取/root目录的内容:

  • 切换到nagios用户测试:
    su - nagios -s /bin/bash
    /usr/bin/du -s /root
    
    如果输出Permission denied,那就是权限问题。

解决办法(二选一):

  • 方法一:用sudo授权(更安全)
    编辑/etc/sudoers文件(用visudo命令编辑,避免语法错误),添加一行:
    nagios ALL=(ALL) NOPASSWD: /usr/bin/du -s /root
    
    然后修改脚本里的du命令为:
    rootUsage=$(sudo /usr/bin/du -s /root | /usr/bin/awk '{print $1}')
    
  • 方法二:修改/root目录权限(不推荐,有安全风险)
    给/root目录添加其他用户的读权限:
    chmod o+x /root
    

3. 环境变量差异问题

Nagios执行脚本时的环境变量和你命令行登录的环境不一样,比如PATH可能不包含系统命令的路径,导致找不到du或awk。所以建议在脚本里始终使用命令的绝对路径(比如/usr/bin/du而不是du),避免依赖环境变量。

4. Nagios命令配置错误

检查你的Nagios command定义是否正确,比如:

command_name    check_root_storage
    command_line    $USER1$/check_root_storage.sh
}

确保$USER1$指向的是/usr/local/nagios/libexec/,并且服务定义里正确调用了这个command,没有拼写错误。

内容的提问来源于stack exchange,提问作者sree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:22:07