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

我在Nagios中使用了一些基于Perl的脚本来进行服务检查,并且我得到了(Service check did not exit properly)(null) ,结果在Nagios中,但是脚本在命令行上工作的很好。

我在网上看到了解决scheme,build议通过在Nagiosconfiguration中设置enable_embedded_perl=0来禁用内部Perl解释器,或者通过明确指定解释器的path。 这并没有帮助这个问题。

还有什么呢?

Nagios包含自己的embedded式Perl解释器。 你的插件可能不符合epn标准。

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

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

你也可以使它符合规定 ,但几乎肯定不值得麻烦。

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

/usr/bin/perl加上命令。

这个解决scheme更多的是解决方法,这样做可能不是一个好主意,但是至less你的插件应该像从terminal启动时一样工作。

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