Nagios插件使用编译的perl给出“没有输出返回”

时间:2014-08-01 10:22:55

标签: perl

我有一个用Perl编写的自定义nagios插件。出于复杂的政治原因,我需要隐藏此插件的源代码。我发现这样做的唯一方法是使用perlc(http://marginalhacks.com/Hacks/perlc)。

用作者的话说:

"采用单个perl脚本,使用带有可选定义键的简单编码转换块。脚本在运行时被解码并送到perl库,以避免它落入用户的手中。"

我得到的问题是Nagios显示"没有从插件返回输出"当我使用插件的编译版本时。原始perl源工作得很好。

调试一段时间后,我将问题缩小到使用perl中的exit。即

编译时效果很好。

print "OK: Everything is working fine.\n";

然而,这不起作用并导致""没有从插件返回输出"

print "OK: Everything is working fine.\n";
exit 1;

如何退出(0 1 2或3)并不重要我仍然遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

根据cross-posted PerlMonks thread,通过启用autoflushing来解决问题:

$| = 1;

来自perlvar

  
      
  • HANDLE-> autoflush(EXPR)
  •   
  • $ OUTPUT_AUTOFLUSH
  •   
  • $ |

         

    如果设置为非零,则立即强制刷新并在每次写入或之后   在当前选定的输出通道上打印。默认值为0   (无论通道是否真的由系统缓冲或   不; $|仅告诉您是否已明确要求Perl进行刷新   每次写完后)。如果输出,STDOUT通常会进行行缓冲   到终端和否则缓冲块。设置此变量是   主要用于输出管道或插槽时,例如   当您在rsh下运行Perl程序并想要查看时   输出正在发生。

  •   

有关详细信息,请参阅文章Suffering from Buffering?