更新cpan
pnp4nagios / NPCD中的模块后,每次调用脚本时都会在我的syslog中记录以下内容;
NPCD[19673]: ERROR: Executed command exits with return code '255'
NPCD[19673]: ERROR: Command line was '/etc/pnp4nagios/libexec/process_perfdata.pl -n --bulk /var/spool/icinga2/perfdata/host-perfdata.1524923929'
似乎没有任何功能或数据丢失,而且我的图表按预期填充 - 但我被垃圾邮件所淹没。
从cli运行脚本给出了这个结果;
bash-4.1$ /etc/pnp4nagios/libexec/process_perfdata.pl -n --bulk /var/spool/icinga2/perfdata/host-perfdata.1524919009
tv_interval() 2nd argument should be an array reference at /etc/pnp4nagios/libexec/process_perfdata.pl line 218, <PDFILE> line 111
该错误唯一有用的google结果指向Time::HiRes
模块。
答案 0 :(得分:2)
看来当前版本的Time::HiRes
是问题。 cpan
提供Time-HiRes-1.9758
作为更新,但这似乎是导致问题的版本。
为了阻止错误,我必须通过执行以下操作降级该模块;
make clean
在已安装版本的文件夹中(我在.cpan/build/Time-HiRes-1.9758
)然后从cpan获取特定版本;
cpan JHI/Time-HiRes-1.9721.tar.gz
安装了旧版(1.9721)。
重新启动npcd
,错误消失。
我不确定哪个版本的Time-HiRes
在行为中引入了此错误/更改,因为我没有通过它们并且不能100%确定问题的实际位置(npcd / Time-HiRes /其他地方)。希望这能指向其他人正确的方向。
来自ikegami's评论
&#34;即使在版本1.9721中,第二个参数(如果提供)也必须是 数组引用。似乎行为的唯一变化就是增加 输入验证。
process_perfdata.pl
有缺陷,而且更新 版本Time::HiRes
让您知道。&#34;
答案 1 :(得分:0)
即使在最新版本的pnp4nagios中,这也是一个问题。 如果您需要快速的解决方法,则可以修改pnp4nagios脚本process_perfdata.pl,使其始终传递数组引用,如下所示(差异输出):
sub main {
my $job = shift;
my $t0 = [gettimeofday];
- my $t1;
+ my @t1=();
+ my $t1=\@t1;
my $rt;
my $lines = 0;
# Gearman Worker
我已经做到了,它似乎可以正常工作,并删除了非常常见的错误消息。如果可能会引起问题,我会在这里发帖。
答案 2 :(得分:0)
问题在于最新的库Time:HiRes 1.9758和tv_interval范围的第二个值。根据手册(如果省略),则使用实际时间-它的确切作用是什么。因此,您需要将此命令应用于脚本process_perfdata.pl:
sed -s's / tv_interval $ t0,$ t1 / tv_interval $ t0 / g'-i process_perfdata.pl
此后,一切都会正常进行。 我遇到了CentOS8的问题,后者不提供HiRes库的旧版本。另一个症状是npcd无法创建.pnp内部文件夹。