AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 402312
Accepted
Bart B
Bart B
Asked: 2012-06-27 03:40:46 +0800 CST2012-06-27 03:40:46 +0800 CST 2012-06-27 03:40:46 +0800 CST

NRPE 和 Perl - 不能包含任何内容,否则会中断

  • 772

几个星期以来,我一直在努力摆脱 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 包含路径的问题,但在 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 位于列出的@INC 中!

Perl 怎么会找不到就在那里的文件呢?当在终端中以用户 nagios 身份运行时,这可以完美运行,那么 NRPE 对环境做了什么来搞乱 Perl?

perl nagios nrpe
  • 1 1 个回答
  • 1605 Views

1 个回答

  • Voted
  1. Best Answer
    Bart B
    2012-07-04T01:36:27+08:002012-07-04T01:36:27+08:00

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

    我还没有找到一个很好的解决方案来为 NRPE 关闭 SELinux。

    • 2

相关问题

  • CentOS 的依赖挑战

  • 将执行 Perl REGEX 扩展的 Lex Flex 变体

  • 将 perl 脚本作为 Windows 服务运行

  • debian 升级失败,导致 perl 问题

  • Perl 5.10 登录/注销脚本

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve