使用Nagios,我有一个我想要监控的活动和备用服务器设置。当活动在线时,它将响应此OID。备用数据库不会回答此OID,但我仍然想要经常轮询它。这样,如果服务器翻转/翻转其状态,SNMP检查将继续工作。
我正在Nagios中配置两个服务器以进行例行检查。我的目标是检查备用数据库,如果它超时,则检查活动(由变量$ peer定义)以验证备用数据库是否正确备用。然后单击确定退出。如果备用AND活动没有回复,则退出严重。
PHP snmpwalk在超时时发送警告,无法访问主机。我正在使用自定义错误处理程序来捕获警告并对其执行某些操作。
我似乎无法启动第二轮SNMP检查。它经过我脚本的其余部分,沿途回应我的所有调试。我的预期结果是退出。
如何使用此设置执行嵌套尝试和捕获?
// First, setup error handling.
function errorHandler($errno, $errstr, $errfile, $errline) {
throw new Exception($errstr, $errno);
}
set_error_handler('errorHandler');
if (!is_null($peer)) {
//Dummy SNMP check to see if we get a timeout error or not.
try {
echo "trying ".$host." \n";
snmpwalk($host,$community,$oid);
}
catch (Exception $e) {
// If we get here, it timed out. Now check to see if the peer server is up.
echo "timed out, trying ".$peer." \n";
try {
snmpwalk($peer,$community,$oid);
}
catch (Exception $e) {
// At this point, the peer server is up, so chances are we're the standby.
echo "standby is up, we are ok";
$output = "OK: It appears this is the standby server. \n";
fwrite(STDOUT, $output);
exit(0);
}
echo "Hmm, something else happened. \n";
}
}
// Restore default error handler.
restore_error_handler();
答案 0 :(得分:1)
您的catch块包含注释,表明您认为您已成功连接到$ peer但catch块仅在FAILS连接到$ peer时才会运行。
将您的代码移到catch块之外,您将获得所需的行为。