Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Net::扩展OID的SNMP缓存结果_Linux_Perl_Snmp_Net Snmp - Fatal编程技术网

Linux Net::扩展OID的SNMP缓存结果

Linux Net::扩展OID的SNMP缓存结果,linux,perl,snmp,net-snmp,Linux,Perl,Snmp,Net Snmp,这项工作的范围是“同时”查询两台机器的高分辨率计时器,并获得两个系统之间的时钟不准确度。这是通过让第三台机器发送自定义OID的SNMP get来完成的,其中SNMP代理被配置为调用perl脚本以返回高分辨率计时器。所有这些都可以正常工作,因为snmp get管理返回预期结果。但是,不管snmpget查询的频率如何,snmpagent都只会每隔5秒对脚本执行一次新的查询。我正在运行NetSNMP版本5.4.3。经过一些研究,我发现这是典型的网络SNMP缓存结果,并且是在MIB树的基础上完成的。通过

这项工作的范围是“同时”查询两台机器的高分辨率计时器,并获得两个系统之间的时钟不准确度。这是通过让第三台机器发送自定义OID的SNMP get来完成的,其中SNMP代理被配置为调用perl脚本以返回高分辨率计时器。所有这些都可以正常工作,因为snmp get管理返回预期结果。但是,不管snmpget查询的频率如何,snmpagent都只会每隔5秒对脚本执行一次新的查询。我正在运行NetSNMP版本5.4.3。经过一些研究,我发现这是典型的网络SNMP缓存结果,并且是在MIB树的基础上完成的。通过查询snmpwalk至1.3.6.1.4.1.8072.1.5.3,存在具有相应间隔的MIB(nsCacheTable)。显然,这些值可以更改为0以删除缓存。但其中一些是只读的。尽管我已经使用SNMPset将其中一些设置为0(因为大多数设置返回了错误的对象类型错误)。 我知道非常基本的SNMP,所以我遵循在线指南,在snmpd.conf中将下面的自定义OID映射到perl脚本

extend .1.3.6.1.4.1.27654.3 return_date /usr/bin/perl [directory]/[perl script name].pl
那么包含输出的实际OID(以历元为单位的时间)是: iso.3.6.1.4.1.27654.3.3.1.1.11.114.101.116.117.114.110.95.100.97.116.101

有人知道如何禁用此OID的缓存吗

提前谢谢

---编辑---

根据博文,为了避免禁用缓存,可以使用passpersist脚本,乍一看,它的实现看起来更复杂。我用来调用的perl脚本如下:

#!/usr/bin/perl
# THIS SCRIPT RETURNS THE EPOCH TIME OF DAY IN MICROSECONDS

use Time::HiRes qw(gettimeofday);
($s, $usec) = gettimeofday();

$newtime = $s.$usec;
print ($newtime);

任何人都可以帮助将此脚本转换为pass persist,以及snmpd.conf应该是什么样子?

为什么要使用SNMP进行时钟同步?这似乎是一个考虑不周的系统设计。在很多情况下,SNMP在交付保证或定时方面不可靠……它不是通过SNMP进行时钟同步。它是通过SNMP查询系统的高分辨率时间。目的是“同时”将此查询发送到两台机器。