Отчет об ошибках 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
  ...
}
Другие вопросы по тегам