Отчет об ошибках 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
...
}