我正在使用一些基于 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.pm
Perl 模块。您会在其中的某处找到类似这样的一行:
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
)。