并行 snmpbulkget 导致发生错误
snmpbulkget in parallel is causing an error to occur
尝试通过简单的输出查询大量设备(在此测试用例中;模型识别)
单独 运行 时,我的代码工作正常;当我尝试将其并行化时...发生错误
名为“get”的脚本文件:
\#!/bin/bash
model="$(snmpbulkget -r1 -t1 -v2c -c test_comm 1.3.6.1.2.1.47.1.1.1.1.13 | grep -m1 STRING | sed 's/.*://' | sed 's/ "//' | sed 's/"//')" &&
echo ",$model"
使用单一测试;正常工作:
./get 10.23.50.117
10.23.50.117,N9K-C93108TC-EX
尝试并行化(即使只有 10 个进程):
xargs -d " " -P 10 --arg-file=check ./get
snmp_build: unknown failure
snmpbulkget: Error building ASN.1 representation (Can't build OID for variable)
在 xargs 中使用 -L arg 标志会导致列表中的每个 IP 被命中 10 次,而不是 10 个 IP 一次。
cat check_out | sort
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
您的问题是理解 "xargs" 实用程序的参数。
您没有告诉我们您的 "check" 文件是什么样的。
当我尝试使用正确的参数时,它起作用了:
% ./get 10.201.0.110
10.201.0.110,..System Bootstrap, Version 11.0(10c), SOFTWARE..Copyright (c) 1986-1996 by cisco Systems..
% ./get 10.1.120.142
10.1.120.142,BOOT_NORMAL
% cat check
10.201.0.110
10.1.120.142
% xargs -L 1 -P 10 --arg-file=check ./get
10.201.0.110,..System Bootstrap, Version 11.0(10c), SOFTWARE..Copyright (c) 1986-1996 by cisco Systems..
10.1.120.142,BOOT_NORMAL
尝试通过简单的输出查询大量设备(在此测试用例中;模型识别)
单独 运行 时,我的代码工作正常;当我尝试将其并行化时...发生错误
名为“get”的脚本文件:
\#!/bin/bash
model="$(snmpbulkget -r1 -t1 -v2c -c test_comm 1.3.6.1.2.1.47.1.1.1.1.13 | grep -m1 STRING | sed 's/.*://' | sed 's/ "//' | sed 's/"//')" &&
echo ",$model"
使用单一测试;正常工作:
./get 10.23.50.117
10.23.50.117,N9K-C93108TC-EX
尝试并行化(即使只有 10 个进程):
xargs -d " " -P 10 --arg-file=check ./get
snmp_build: unknown failure
snmpbulkget: Error building ASN.1 representation (Can't build OID for variable)
在 xargs 中使用 -L arg 标志会导致列表中的每个 IP 被命中 10 次,而不是 10 个 IP 一次。
cat check_out | sort
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.1,NY-SW1
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.12.0.4,NY-SW2
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
10.14.14.8,CY-WAN-SW1
您的问题是理解 "xargs" 实用程序的参数。 您没有告诉我们您的 "check" 文件是什么样的。 当我尝试使用正确的参数时,它起作用了:
% ./get 10.201.0.110
10.201.0.110,..System Bootstrap, Version 11.0(10c), SOFTWARE..Copyright (c) 1986-1996 by cisco Systems..
% ./get 10.1.120.142
10.1.120.142,BOOT_NORMAL
% cat check
10.201.0.110
10.1.120.142
% xargs -L 1 -P 10 --arg-file=check ./get
10.201.0.110,..System Bootstrap, Version 11.0(10c), SOFTWARE..Copyright (c) 1986-1996 by cisco Systems..
10.1.120.142,BOOT_NORMAL