nagios – NRPE和Perl – 不能包括任何东西或它会破坏

前端之家收集整理的这篇文章主要介绍了nagios – NRPE和Perl – 不能包括任何东西或它会破坏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
几周以来,我一直在敲打NRPE和Perl.

我决定从绝对的第一原则开始,并创建一个虚拟的nagios插件,除了总是返回OK之外什么都不做.我将其命名为check_true.pl,将其安装在远程服务器上并配置NRPE以将其作为check_test提供.

整个脚本只是:

#!/usr/bin/perl

print "OK - this dummy test always returns OK\n";
exit 0;

这对NRPE没有问题.

以此为出发点,我打算慢慢构建我想要的脚本,看看它在什么时候断开.我没有到目前为止.以下内容针对NRPE(但在本地和SSH上工作正常):

#!/usr/bin/perl

use strict;

print "OK - this dummy test always returns OK\n";
exit 0;

它给出了可怕的错误:NRPE:无法读取输出.

我不能包含任何内容或我收到此错误.这使我无法做我真正需要做的事情!

我认为这可能是perl include路径的一个问题,但在NRPE上运行以下表明它不是(给出与在终端上运行时相同的包含路径):

#!/usr/bin/perl

print "OK - Perl include path: ".join(q{,},@INC)."\n";
exit 0;

有谁知道为什么NRPE在Perl中的表现如此糟糕?任何人都可以推荐修复?甚至是一种解决方法

更新1:
该命令在NRPE中定义如下:

command[check_test]=/usr/lib64/nagios/plugins/check_true.pl

更新2:
我做了一些调试,通过在perl脚本周围添加包装器,我能够捕获STDERR.

#!/bin/sh

out=`/usr/lib64/nagios/plugins/check_true.pl 2>&1`
echo $out

结果让事情变得更加混乱:

Can't locate strict.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/lib64/nagios/plugins/check_true.pl line 3. BEGIN Failed--compilation aborted at /usr/lib64/nagios/plugins/check_true.pl line 3.

快速搜索显示strict.pm位于/usr/share/perl5/strict.pm,/usr/share / perl5 IS位于列出的@INC中!

Perl怎么能找不到那个文件呢?当作为终端中的用户nagios运行时,这可以完美地工作,那么NRPE对环境做什么来搞乱Perl?

解决方法

罪魁祸首是SELinux,它在RHEL6上极大地限制了NRPE过程.默认情况下,它甚至会阻止访问核心perl模块,如strict和warnings.

我还没有找到一个很好的解决方案,只关闭NRPE关闭SELinux.

猜你在找的Perl相关文章