我在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调用时)。