超时作为条件
timeout as a condition
我正在尝试使用 bash 脚本轮询一组具有多个 SNMP 社区字符串的设备。目标是,如果 snmpwalk 超时,它会尝试另一个字符串,但我的情况是错误的。
while read line
do
ip="$line"
device=$(/usr/bin/snmpwalk -v 2c -c string1 $ip 1.3.6.1.2.1.1.1)
if [ $device = false ]
then
device=$(/usr/bin/snmpwalk -v 2c -c string2 $ip 1.3.6.1.2.1.1.1)
if [ $device = false ]
then
device=$(/usr/bin/snmpwalk -v 2c -c string3 $ip 1.3.6.1.2.1.1.1)
break
fi
fi
echo "$ip $device"
done < ip-list > device-type
我使用 -z
解决了这个问题并添加了 timeout -s KILL 2
因为它需要很长时间。
while read line
do
ip="$line"
device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string1 $ip 1.3.6.1.2.1.1.1)
if [ -z "$device" ]
then
device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string2 $ip 1.3.6.1.2.1.1.1)
if [ -z "$device" ]
then
device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string3 $ip 1.3.6.1.2.1.1.1)
if [ -z "$device" ]
then
device=$(echo " Not my problem ")
fi
fi
fi
echo "$ip $device"
done < ip-list > device-list
我正在尝试使用 bash 脚本轮询一组具有多个 SNMP 社区字符串的设备。目标是,如果 snmpwalk 超时,它会尝试另一个字符串,但我的情况是错误的。
while read line
do
ip="$line"
device=$(/usr/bin/snmpwalk -v 2c -c string1 $ip 1.3.6.1.2.1.1.1)
if [ $device = false ]
then
device=$(/usr/bin/snmpwalk -v 2c -c string2 $ip 1.3.6.1.2.1.1.1)
if [ $device = false ]
then
device=$(/usr/bin/snmpwalk -v 2c -c string3 $ip 1.3.6.1.2.1.1.1)
break
fi
fi
echo "$ip $device"
done < ip-list > device-type
我使用 -z
解决了这个问题并添加了 timeout -s KILL 2
因为它需要很长时间。
while read line
do
ip="$line"
device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string1 $ip 1.3.6.1.2.1.1.1)
if [ -z "$device" ]
then
device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string2 $ip 1.3.6.1.2.1.1.1)
if [ -z "$device" ]
then
device=$(timeout -s KILL 2 /usr/bin/snmpwalk -v 2c -c string3 $ip 1.3.6.1.2.1.1.1)
if [ -z "$device" ]
then
device=$(echo " Not my problem ")
fi
fi
fi
echo "$ip $device"
done < ip-list > device-list