nagios – NRPE和Perl – 不能包括任何东西或它会破坏
几周以来,我一直在敲打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: command[check_test]=/usr/lib64/nagios/plugins/check_true.pl 更新2: #!/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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |