Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 向Nagios插件提供测试数据的标准?_Perl_Testing_Nagios - Fatal编程技术网

Perl 向Nagios插件提供测试数据的标准?

Perl 向Nagios插件提供测试数据的标准?,perl,testing,nagios,Perl,Testing,Nagios,我正在用Perl开发一个Nagios插件(没有Nagios::plugin,只有普通Perl)。我正在检查的错误条件通常来自插件内部调用的命令输出。然而,创建错误条件将非常不方便,因此我正在寻找一种方法,将测试输出提供给插件,以查看它是否正常工作 目前我发现的最简单的方法是使用命令行选项,可以选择从文件中读取输入,而不是调用命令 if($opt_f) { open(FILE, $opt_f); @output = <FILE>; close FILE; } else {

我正在用Perl开发一个Nagios插件(没有Nagios::plugin,只有普通Perl)。我正在检查的错误条件通常来自插件内部调用的命令输出。然而,创建错误条件将非常不方便,因此我正在寻找一种方法,将测试输出提供给插件,以查看它是否正常工作

目前我发现的最简单的方法是使用命令行选项,可以选择从文件中读取输入,而不是调用命令

if($opt_f) {
  open(FILE, $opt_f);
  @output = <FILE>;
  close FILE;
}
else {
  @output = `my_command`;
}
if($opt\u f){
打开(文件$opt_f);
@输出=;
关闭文件;
}
否则{
@输出=`my_命令`;
}

还有其他更好的方法吗?

或者您可以使用命令的测试版本返回各种状态供您测试(可能通过命令行参数)

您将myCMND的测试版本放在某个测试目录(/my/nagois/tests/bin)中

然后在运行测试的命令行上操作PATH环境变量

$env PATH=/my/nagois/tests/bin:$PATH nagios_pugin.pl

对$PATH的更改只会持续一个命令执行的时间。更改被本地化到为运行插件而生成的子shell

用于执行命令的反勾号将导致shell使用路径来定位命令,这将导致命令的测试版本,该版本位于现在是搜索路径上的第一个目录中

如果我不清楚,请告诉我



新方法的新答案。

在插件中构建一个命令行开关,如果在命令行上设置-t,则在/path/to/test/command处使用测试命令,否则在/path/to/production/command处运行“production”命令


默认操作是生产,仅在指示测试模式的开关存在时进行测试。

我喜欢这个想法的原理。但是,[plug-in development guidelines]()规定,在未指定系统命令的完整路径的情况下,不应执行系统命令。但另一种解决方案是使用一个参数来选择性地指定可执行命令。