Relatório de erros SNMP para stdout

3

Por que o net-snmp após os erros "Nenhum Objeto Disponível neste agente neste OID" sai com 0 e imprime a mensagem de erro para STDOUT enquanto outros erros são impressos em STDERR e têm um status de saída %código%? Comparar:

$ /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

Uma string de comunidade ou endereço IP incorreto, no entanto, é tratado de forma diferente (por exemplo, "publi" em vez de "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

Isso é realmente irritante já que estou tentando escrever uma função que faz algumas verificações de integridade para ter certeza de que certos MIBs / OIDs estejam de fato disponíveis no agente a ser consultado. Gostaria de poder fazer algo assim (em um script bash):

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

Alguém sabe o motivo disso e como posso "consertar" isso?

Obrigado

    
por user3040975 16.12.2013 / 14:25

1 resposta

1

Como outra alternativa, você pode fazer isso:

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

Ou se você quiser lidar com as duas situações da mesma maneira, isso também funciona:

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