Назад | Перейти на главную страницу

Сообщение об ошибках 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
  ...
}

Кто-нибудь знает причину этого и как я могу это «исправить»?

Спасибо

В качестве другого обходного пути вы можете сделать следующее:

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
  ...
}