SNMP 错误报告至标准输出

SNMP 错误报告至标准输出

为什么 net-snmp 在出现“此代理上此 OID 上无可用对象”错误后会退出并将0错误消息打印到 ,STDOUT而其他错误会打印到STDERR并具有退出状态1?比较:

$ /usr/bin/snmpget -Oqv -v2c -cpublic localhost .1.3.6.1.2.1.2.1.0 2> /dev/null
No Such Object available on this agent at this OID
$ echo $?
0

但是,错误的社区字符串或 IP 地址的处理方式不同(例如“publi”而不是“public”):

$ /usr/bin/snmpget -Oqv -v2c -cpubli localhost .1.3.6.1.2.1.2.1.0 2>&1 > /dev/null
Timeout: No Response from localhost.
$ echo $?
1

这真的很烦人,因为我正在尝试编写一个函数来执行一些健全性检查,以确保某些 MIB/OID 确实可用于要查询的代理。我希望能够做这样的事情(在 bash 脚本中):

snmp_sanity_checks() {
  ...
  if ! err=$($snmpcmd); then
    echo "ERROR: $err"
    exit $UNKNOWN
  fi
  ...
}

有人知道这个原因吗以及我该如何“解决”它?

谢谢

答案1

作为另一种解决方法,您可以这样做:

snmp_sanity_checks() {
  ...
  if ! err=$($snmpcmd); then
    echo "ERROR: $err"
    exit $UNKNOWN
  elif [[ $err == 'No Such Object'* ]]; then
    echo "ERROR: $err"
    exit $UNKNOWN
  fi
  ...
}

或者如果你想以相同的方式处理这两种情况,那么这也有效:

snmp_sanity_checks() {
  ...
  if ! err=$($snmpcmd) || [[ $err == 'No Such Object'* ]]; then
    echo "ERROR: $err"
    exit $UNKNOWN
  fi
  ...
}

相关内容