加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:33:05 所属栏目:大数据 来源:网络整理
导读:几周以来,我一直在敲打NRPE和Perl. 我决定从绝对的第一原则开始,并创建一个虚拟的nagios插件,除了总是返回OK之外什么都不做.我将其命名为check_true.pl,将其安装在远程服务器上并配置NRPE以将其作为check_test提供. 整个脚本只是: #!/usr/bin/perlprint "OK
几周以来,我一直在敲打NRPE和Perl.

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

整个脚本只是:

#!/usr/bin/perl

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

这对NRPE没有问题.

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

#!/usr/bin/perl

use strict;

print "OK - this dummy test always returns OKn";
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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读