如何解决我的服务的“(服务检查未正确退出)”和“(空)”结果?


10

我使用一些基于Perl脚本的Nagios的维修检查,我得到(Service check did not exit properly)(null)作为结果在Nagios的,但脚本作品在命令行上很大。

我已经看到在线解决方案,建议通过设置enable_embedded_perl=0Nagios配置或显式指定解释器的路径来禁用内部Perl解释器。这对解决问题没有帮助。

还有什么呢?


您能否显示一个示例,说明它如何通过CLI“很好地工作”?
基思(Keith)

Answers:


11

Nagios包括其自己的嵌入式perl解释器。您的插件可能不符合EPN标准。

您可能要全局禁用它,或者只是为脚本禁用它。该文档页面的底部显示了如何执行此操作。

基本上,# nagios: -epn在脚本的前十行中的某处添加自己的行。这应该可以解决您的问题。

您也可以使其符合标准,但是几乎可以肯定不值得麻烦。


是的,谢谢你的建议。即使我明确指出这对我面临的特定问题也没有任何影响。
Der Hochstapler 2014年

这是nagios的真正解决方案。如果没有-epn,则插件将由nagios包含并在内部执行。使用-epn,它可以作为外部可执行文件加载,类似于二进制文件或bash脚本。参见页面:nagios.sourceforge.net/docs/3_0/embeddedperl.html 并考虑epn投诉
Znik 2014年

1
根据# nagios: -epn文档和我的测试,中必须有冒号。
idupree 2015年

1
奇怪的是,当前的nagios-plugins-standard(2.2-3ubuntu2)的Ubuntu LTS(18.04)版本存在此问题。如果我修改了受影响的插件(例如check_disk_smb和)check_file_age,或者设置了use_embedded_perl_implicitly=0
Akom,

为我修复它!谢谢...
奥斯卡·布拉沃

3

Nagios Exchange的一些Perl脚本将尝试包含utils.pmPerl模块。您会在其中某处找到这样的行:

use lib "/usr/local/nagios/libexec";

在Debian上安装Nagios时,utils.pm文件的默认位置是/usr/lib/nagios/plugins/utils.pm。因此,该use lib指令应为:

use lib "/usr/lib/nagios/plugins";

从命令行执行命令很可能会起作用,因为您在中/usr/lib/nagios/plugins/,正在编辑插件。


2

在命令前面加上/usr/bin/perl

该解决方案更多是一种解决方法,这样做可能不是一个好主意,但是至少您的插件应与从终端启动时的工作方式相同。

注意:根据我的经验# nagios -epn,它的工作频率很高,但有时似乎还不够。我注意到,发生这种情况时,出现故障的插件会报告许多警告(使用调用脚本时perl -w)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.