Заменить тайм-аут SNMP: нет ответа от ‹IP_Address› конкретным текстом

У меня есть скрипт, который запрашивает данные OID через SNMPWalk, проблема в том, что когда определенный IP-адрес (например, 172.20.36.8) недоступен, он отображает Timeout: No Response from 172.20.36.8. Есть ли код, который мог бы заменить этот ответ от запроса snmp, чтобы, если он отображается таким образом, я хотел бы, чтобы вместо этого «Тайм-аут: ...» отображалось слово «Простой»

вот часть скрипта, который я запускаю:

for EACH in `echo $APIP`
  do
    SectorID=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.1.16 | awk '{print $4}'
    ActiveSubs=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.7.1 | awk '{print $4}'
    UniqueSubs=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.7.18 | awk '{print $4}'
    printf "%s\t| %s\t| %s\t| %s\t|\n" "${EACH}" "${SectorID}" "${ActiveSubs}" "${UniqueSubs}"
  done

Теперь вот результат указанной части скрипта

172.20.36.3     |   1   |      2        |      4        |
172.20.36.4     |   2   |      5        |      8        |
172.20.36.5     |   3   |      11       |      16       |
Timeout: No Response from 172.20.36.6
Timeout: No Response from 172.20.36.6
Timeout: No Response from 172.20.36.6
172.20.36.6     |       |               |      0        |
172.20.36.7     |   5   |      0        |      1        |
Timeout: No Response from 172.20.36.8
Timeout: No Response from 172.20.36.8
Timeout: No Response from 172.20.36.8
172.20.36.8     |       |               |      0        |

когда он достигает IP-адреса .6 и .8, он отображает "Timeout: No Response...". Я хотел как-то отобразить это так, если он не получит ответа от указанного IP-адреса:

172.20.36.3     |   1   |      2        |      4        |
172.20.36.4     |   2   |      5        |      8        |
172.20.36.5     |   3   |      11       |      16       |
172.20.36.6     |  Idle |     Idle      |     Idle      |
172.20.36.7     |   5   |      0        |      1        |
172.20.36.8     |  Idle |     Idle      |     Idle      |

может ли кто-нибудь, кто может помочь мне решить эту проблему? Я очень ценю ваши ответы. :)


person Stonesteel    schedule 02.12.2013    source источник
comment
Почему? Он не простаивает. Время ожидания истекло, пытаясь выяснить, каково на самом деле состояние.   -  person user207421    schedule 02.12.2013
comment
да, это не простаивает буквально, я просто хотел выглядеть так, чтобы мы знали, что ip_address недоступен.   -  person Stonesteel    schedule 03.12.2013
comment
Опять же, почему? Почему вы хотите лгать своим пользователям? «Простой» и «недоступный» — разные состояния. Призов за слияние нет.   -  person user207421    schedule 05.12.2013
comment
Сэр, я не лгу пользователям, мы все являемся технической поддержкой, которая хочет иметь функциональный скрипт, который мы можем использовать для нашей повседневной работы. Все мы, кто будет использовать указанный скрипт, знают, что если он отображает IDLE, это означает, что определенный IP-адрес недоступен. У вас есть предложения, сэр? можете ли вы помочь мне хотя бы с отправной точкой для создания кода, а не критиковать то, что я пытаюсь сделать?   -  person Stonesteel    schedule 07.12.2013
comment
Я не лгу пользователям, это термин, который мы использовали в нашей компании, чтобы определить, какие IP-адреса недоступны, я думаю, что мы не должны подвергать сомнению или критиковать то, что здесь пытаются сделать члены определенный скрипт, чтобы помочь нашей компании не врать компании. Надеюсь, вы поняли мою точку зрения, сэр EJP. :)   -  person Stonesteel    schedule 09.12.2013


Ответы (1)


Вы должны быть в состоянии сделать что-то вроде этого:

SectorID=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.1.16 2>&1 | sed 's/Timeout: No Response.*/Idle/'`
if [ "$SectorId" != "Idle" ] ; then
    SectorID=`echo $SectorID | awk '{ print $4 }'`
fi

Но сложность этого скрипта быстро растет, и у меня было бы гораздо больше искушения переписать его в лучшей среде сценариев, чем sh (я не критикую bash; я использую его все время), например, python или perl. Но если вы хотите использовать *sh, я бы, по крайней мере, реализовал функцию, которая выполняла бы обработку за вас один раз, а не повторяла вышеописанное 4 раза. Но я оставлю это в качестве упражнения для читателя.

person Wes Hardaker    schedule 11.12.2013
comment
Спасибо, мистер Уэс Хардакер. ваш скрипт был очень полезен. Результат тот, которого я ожидаю. :) - person Stonesteel; 06.01.2014