Ich habe mit dem gleichen Problem für eine Weile gekämpft. Tatsache ist, dass der Versuch, sich mit einem "toten" oder nicht reagierenden Server mit ssh2 zu verbinden, Ihre Anwendung so lange blockiert, wie das maximale Verbindungszeitlimit des Zielservers ist.
Die einfache Art und Weise im Voraus zu erkennen, ob die Instanz Ihnen Probleme verursachen wird, wenn SHH-ing in sie es (sehen, ob es in Reaktion ist) zu ping ist.
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;
}
}
Diese Methode ermöglicht es Ihnen, eine schnellere Reaktion auf den Zustand des Servers zu erhalten, so dass Sie wissen, wenn Sie im Begriff sind, Ihre Zeit ssh-ing in sie zu verschwenden.
Haben Sie jemals herausgefunden, wie Sie das machen? – solefald