У меня есть куча серверов, и я потратил силы на создание сценария php для ssh всех моих серверов, сбора последней записи в журнале и вставки всех результатов в базу данных.
Я использую phpseclib для подключения к серверу, и один за другим он работает нормально, но, поскольку у меня их много, я почему бы не использовать потоки?
Ну, я не совсем уверен, что мне здесь не хватает, но вот что я получил до сих пор. вне потока все работает нормально, но как только я вхожу в поток NET_SSH2-> login все падает appart и ничего не работает.
Вот мой код, какие-либо подсказки о том, что мне не хватает?
Спасибо
<?php
set_time_limit(0);
include('Net/SSH2.php');
class poller extends Thread{
private $tid;
private $tip_array;
public $tresult;
public function __construct($tid,$tip_array)
{
$this->tid = $tid;
$this->tip_array = $tip_array;
}
public function run()
{
$i=1;
foreach ($this->tip_array as $ip){
$temp_result[$i][0]=$ip;
$ssh = new Net_SSH2($ip[0]);
if (!$ssh->login('user', 'pass')) {
$temp_result[$i][1]= $ssh->isConnected() ? 'bad username or password' : 'unable to establish connection';
}
$temp_result[$i][2]=$ssh->exec(' grep "Device" syslog.messages | tail -1');
$i++;
}
$this->tresult=$temp_result;
}
}
$i=1;
$rows=array(array("1.1.1.1", "2.2.2.2"), array("3.3.3.3", "4.4.4.4"));
foreach ($rows as $row){
$threads[$i] = new poller($i,$row);
$threads[$i]->start();
$i++;
}
foreach ($threads as $thread)
{
$thread->join();
echo '############Thread'.$thread->tid.'############';
print_r($thread->tresult);
echo '##############################';
}
?>
Задача ещё не решена.
Других решений пока нет …