如何捕获PHP snmpwalk警告?

时间:2013-09-23 00:13:50

标签: php error-handling snmp nagios

使用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();

1 个答案:

答案 0 :(得分:1)

您的catch块包含注释,表明您认为您已成功连接到$ peer但catch块仅在FAILS连接到$ peer时才会运行。

将您的代码移到catch块之外,您将获得所需的行为。