kolossus писал(а):
Стоит куча коммутаторов, в основном - типа 3526, но есть и 3627, 3627G и 2108.
Хотелось бы опросить их и получить ответы от всех.
При опросе по SNMP в цикле по всем адресам, если оп определенному адресу нет оборудования, происходит задержка секунд 10, соответственно, если такого оборудования много - сильно задумывается.
почему никто не решился форкать на каждый адрес отдельный процесс который обслуживает запрос к железке? т.е. нечто в духе:
Код:
#!/bin/sh
base_dir='/path/to'
# директория с IP адресами где лежат файлы вида "IP.AD.DR.ES.txt"
# если захотите - просто сделайте цикл по всем адресам "предполагаемого" железа
ip_list_dir="$base_dir/ip"
# скрипт который опрашивает железо
action_script="$base_dir/ip_action.sh"
if [ -d $ip_list_dir ]; then
# список IP адресов
ip_list=`ls $ip_list_dir | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.txt$' | sed s/.txt//`
if [ -n "$ip_list" ]; then
for i in $ip_list; do
ip_file="$ip_list_dir/$i.txt"
if [ -r $ip_file ]; then
if [ -x $action_script ]; then
$action_script $i
fi
fi
done
fi
fi
ip_action.sh примерно такого вида:
Код:
#!/bin/sh
if [ -z $1 ]; then
echo -e "\033[1mFuck you!\033[0m" >&2
exit 1
fi
base_dir='/path/to'
log_dir="$base_dir/ip/log"
log_file="$log_dir/`date "+%Y-%m-%d"`.txt"
snmpset='/path/to/snmpset'
ip=$1
# 3 раза пингуем IP адрес, из строки берем показатель полученных пакетов
ping_rcv_pkt=`ping -c 3 -o -q $ip | grep received | awk '{print $4}'`
# если кол-во полученных пакетов > нуля -> делаем что нибудь
if [ $ping_rcv_pkt -gt 0 ]; then
$snmpget -v 2c -c ppublic $ip .some.cool.oid
else
if [ ! -d $log_dir ]; then
mkdir -p $log_dir
fi
echo -e "`date "+%T"`\tIP $ip down!" >> $log_file
fi
и тогда будет совершенно наплевать на задержки в работе скрипта ...
P.S. пришлось все буквально на коленке писать