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

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

我正在使用一些基于 Perl 的脚本在 Nagios 中检查服务,并在 Nagios 中得到了(Service check did not exit properly)结果(null),但该脚本在命令行上运行良好。

我在网上看到过一些解决方案,建议通过enable_embedded_perl=0在 Nagios 配置中设置或明确指定解释器的路径来禁用内部 Perl 解释器。但这对解决问题没有帮助。

还有什么呢?

答案1

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

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

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

您还可以使其合规,但这几乎肯定不值得这么麻烦。

答案2

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/编辑您的插件。

答案3

在命令前添加/usr/bin/perl

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

注意:根据我的经验# nagios -epn,这种方法通常很有效,但有时似乎还不够。我注意到,当这种情况发生时,错误的插件会报告许多警告(当使用 调用脚本时perl -w)。

相关内容