NPCD:错误:已执行的命令退出并返回代码' 255'

时间:2018-04-28 14:17:59

标签: perl nagios icinga2

更新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模块。

3 个答案:

答案 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内部文件夹。