POE :: Component :: Server :: NRPE,返回值

时间:2012-11-08 18:11:08

标签: perl nagios poe nrpe

我尝试使用您的CPAN模块POE :: Compoenten :: Server :: NRPE。 我尝试了CPAN网站上的示例,并针对nagios-tool check_nrpe进行了测试。

文字很好,但我无法获得正确的返回值。 你在模块描述中描述了这个return_result,但我不知道如何使用它。

会非常好,如果你能给我一个非常简短的例子,如何返回一个值<> 0

非常感谢!

欢呼声, christoph

use POE;
use POE::Component::Server::NRPE;

# test with: check_nrpe -H localhost -c test; echo $?

my $nrped = POE::Component::Server::NRPE->spawn (port => 5666);
$nrped->add_command (command => "test", program =>
sub { print STDOUT "test CRITICAL\n";
return 2;    # always 0???
});

$poe_kernel->run ();
return 0; 

2 个答案:

答案 0 :(得分:1)

感谢您发布此问题。我不知道这个模块,但它对我有很大的帮助。

  1. 尝试在代码中使用严格和警告,这是为了您的好
  2. 使用POE :: Component :: Server :: NRPE :: Constants提供的返回常量,而不是使用0表示OK,1表示WARNING等等
  3. 我认为唯一的问题是您在测试子中使用return 2代替exit 2或更好exit NRPE_STATE_CRITICAL
  4. 以下代码应该产生所需的结果

    use strict;
    use warnings;
    use POE;
    use POE::Component::Server::NRPE;
    
    # it's recommended to use the NRPE return states provided by the module
    use POE::Component::Server::NRPE::Constants qw(NRPE_STATE_OK NRPE_STATE_CRITICAL);
    
    my $nrped = POE::Component::Server::NRPE->spawn (
            port => 5666
    );
    
    $nrped->add_command (command => "test", program =>
            sub {
                    print STDOUT "testing CRITICAL\n";
            # better to use NRPE_STATE_CRITICAL...
                    exit NRPE_STATE_CRITICAL;
            # ... instead of the corresponding digital value
            # but it should work
            # exit 2;
            }
    );
    
    $poe_kernel->run ();
    exit 0;
    

    由于

答案 1 :(得分:0)

看起来像模块中的错误。 作者在cpan上推了一个新版本(0.16 - > 0.18)。