He estado luchando con el mismo problema por un tiempo. El hecho es que si intentas conectarte a un servidor "muerto" o que no responde con ssh2, la aplicación se detendrá durante el tiempo máximo de conexión del servidor de destino.
La manera más fácil de detectar de antemano si la instancia va a causar problemas cuando shh-ción en él es hacer ping a ella (ver si es sensible).
function getPing($addr)
{
//First try a direct ping
$exec = exec("ping -c 3 -s 64 -t 64 ".$addr);
$array = explode("/", end(explode("=", $exec)));
if(isset($pingVal[1]))
{
//There was a succesful ping response.
$pingVal = ceil($array[1]);
}
else
{
//A ping could not be sent, maybe the server is blocking them, we'll try a generic request.
$pingVal = callTarget($addr);
}
echo intval($pingVal)."ms";
if($pingVal > ["threshold"])
{
return false;
}
return true;
}
function callTarget($target)
{
$before = microtime();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target);
curl_setopt($ch, CURLOPT_NOBODY, true);
if (curl_exec($ch))
{
curl_close($ch);
return (microtime()-$before)*1000;
}
else
{
curl_close($ch);
return 9999;
}
}
Este método le permite obtener una respuesta más rápida sobre el estado de su servidor, para que sepa si está a punto de perder el tiempo ssh-ción en ella.
¿alguna vez descubrió cómo hacer esto? – solefald