我正在用Perl开发一个Nagios插件(没有Nagios::P lugin,只是普通的Perl)。我正在检查的错误条件通常来自插件内部调用的命令输出。但是,创建错误条件会非常不方便,所以我正在寻找一种方法将测试输出提供给插件以查看它是否正常工作。
目前我发现的最简单方法是使用命令行选项来选择性地从文件中读取输入,而不是调用命令。
if($opt_f) {
open(FILE, $opt_f);
@output = <FILE>;
close FILE;
}
else {
@output = `my_command`;
}
还有其他更好的方法可以做到这一点吗?
在你的插件中构建一个命令行开关,如果你在命令行上设置 -t,你可以在/path/to/test/command 中使用你的测试命令,否则你在/path/to/production/command 运行 'production' 命令
默认操作是生产,仅通过指示存在测试模式的开关对其进行测试。
你可以有一个命令的测试版本,它返回各种状态供你测试(也许通过命令行参数)。
你把mycommnd的测试版本放在某个测试目录(/my/nagois/tests/bin)中。
然后,在运行测试的命令行上操作 PATH 环境变量。
$ env PATH=/my/nagois/tests/bin:$PATH nagios_pugin.pl
对$PATH的更改只会持续到该命令执行的时间。更改本地化为运行插件而生成的子 shell。
用于执行命令的反引号将导致 shell 使用 PATH 来查找命令,命令的测试版本将位于现在搜索路径上的第一个目录中。
如果我不清楚,请告诉我。
新方法的新答案。