Nagios SNMP:不同的OID具有相同的值

有了Nagios,我想读取数百个Ubiquity设备的设备名称。 这个值在其中一些上有一个OID,另一个在另一个上。 到目前为止,最好的方法是使用这个脚本:

$1/check_snmp -H $2 -o .1.2.840.10036.3.1.2.1.3.5 > /tmp/$2.snmp.nagios.tmp status=$? if [ $status -ne 0 ]; then $1/check_snmp -H $2 -o .1.2.840.10036.3.1.2.1.3.9 > /tmp/$2.snmp.nagios.tmp status=$? fi cat /tmp/$2.snmp.nagios.tmp exit $status 

我不喜欢这里是它使用文件系统,但我不知道如何读取命令输出到一个variables,并退出命令的代码到另一个variables。

有没有办法写这个,所以它只使用variables?

有没有更好的方法来实现主要目标?

您可以直接使用命令snmpget而不是check_snmp,因为check_snmp将使用snmpget(或netsnmp工具的其他工具)并对存储在variables中的结果进行处理。

我在这里粘贴我使用的脚本的骨架:

 function control_error { echo "UNKNOWN : Error during operation" exit 3 } drive="$(snmpget -v1 -Ovq -c <community snmpv1> $IPadress .1.3.6.1.4.1.2.3.51.3.1.13.1.3.1.2.$i)" if [ $? != 0 ]; then control_error;fi drive="$(echo $drive | sed -e 's/"//g')" ... 

该脚本读取一个OID并将结果存储在variables驱动器中。

它testingsnmpget的事件错误,并返回3(对于nagios未知),如果问题。

snmpget选项是:

  • -v1版本的snmp
  • -c社区
  • -Ovq OUPUT选项,只返回没有被询问的OID的结果

你可以在你的variables上工作,例如在这个脚本中使用echo和sed

我通常这样做:

 data=$(your command) result=$? 

这样你可以在$data得到命令的输出,在$result得到返回码。 但也许有一个更好的方法。