代码之家  ›  专栏  ›  技术社区  ›  user3788685

NPCD:错误:执行的命令退出,返回代码为“255”

  •  1
  • user3788685  · 技术社区  · 8 年前

    在中更新模块后 cpan pnp4nagios/NPCD在每次调用脚本时开始在我的系统日志中记录以下内容;

    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 回复  |  直到 8 年前
        1
  •  2
  •   user3788685    8 年前

    当前版本的 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 介绍了这一错误/行为变化,因为我还没有经历过这些错误,也不能百分之百确定问题的实际所在(npcd/兼职/其他地方)。希望这为其他人指明了正确的方向。

    从…起 ikegami's 议论

    “即使在版本1.9721中,第二个参数(如果提供)也必须是 数组引用。看来行为上唯一的变化就是 输入验证的。 process_perfdata.pl 是马车和更新的 的版本 时间::雇佣 让你知道吧。“”

        2
  •  0
  •   user3421823    8 年前

    即使在最新版本的pnp4nagios中,这也是一个问题。 如果需要快速解决方法,可以修改pnp4nagios脚本process\u perfdata。使其始终传递数组引用,如下所示(diff输出):

     sub main {
         my $job = shift;
         my $t0 = [gettimeofday];
    -    my $t1;
    +    my @t1=();
    +    my $t1=\@t1;
         my $rt;
         my $lines = 0;
         # Gearman Worker
    

    我已经这样做了,它似乎工作正常,并删除了非常频繁的错误消息。如果有问题,我会发回这里。

        3
  •  0
  •   Tomas Balazsik    6 年前

    问题在于最新的库时间:租用1.9758,第二个值来自tv\U间隔界限。根据手册,如果指定,则使用实际时间-它的确切用途是什么。因此,您需要将此命令应用于脚本process\u perfdata。pl:

    sed-s/tv\U间隔$t0,$t1/tv\U间隔$t0/g”-i process\U perfdata。pl公司

    在那之后,一切都会正常工作。 我遇到了CentOS8的问题,它没有提供旧版本的HiRes库。另一个症状是npcd无法创建。pnp内部文件夹。