PHP SSH2 скорость работы

245
10 декабря 2016, 10:20

Здравствуйте! Есть такой скрипт на php:

ini_set('max_execution_time', 1000);
ini_set("default_socket_timeout", 1);
$ips=file("ip.txt");
function ssh_exec($n) {
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!(@$con = ssh2_connect($n, 22))){
    echo $n." - fail: unable to establish connection\n";
} else {
   if(!ssh2_auth_password($con, "user", "pass")) {
        echo $n." - fail: unable to authenticate\n";
    } else {
        if (!($stream = ssh2_exec($con, "cat version" ))) {
            echo $n." - fail: unable to execute command\n";
        } else {
            stream_set_blocking($stream, true);
            $data = "";
            while ($buf = fread($stream,4096)) {
                $data .= $buf;
            }
            if (!$data = 'version.1') {
            echo $n." - ".$data;} else {echo $n." - ok\n";}
            fclose($stream);
        }
    }
}
}
echo "<pre>";
foreach ($ips as $ip => $n) {
ssh_exec(trim($n));
}
echo "</pre>";
echo "Time:  " . number_format(( microtime(true) - $startTime), 4) . " Seconds\n";

На одно соединение уходит 1.3 секунды, проблема в том, что айпишников 600+ и чтобы опросить все устройства надо примерно минут 13-15. Возможно ли оптимизировать этот процесс/скрипт? SNMP не вариант пока.

Answer 1

Если из под браузера то можно распаралелить , отправив операцию конекта и проверки в отдельную нитку если по простому то можно юзать pcntl_fork(); если есть доступ к shell то можно как то так:

seq 600| parallel php your_script.php {} > log_check_ssh{}

Тоесть запустить ваш скрипт 600 раз где {} порядковый номер вашего соединения из массива соединений а в скрипте считывать этот номер через $argv[1] , так вы паралельно выполните 600 проверок и сохраните каждую проверку в лог с именем log_check_ssh{}.

READ ALSO
websocket сервер на php

websocket сервер на php

Всем привет

571
PHP, получение названия объекта в массиве

PHP, получение названия объекта в массиве

У нас имеется массив следующего содержания

174
Phpstorm не подсвечивает методы объекта

Phpstorm не подсвечивает методы объекта

Создал класс, внутри класса переменную $dbh и присвоил ему PDOДалее обращаюсь к $this->dbh-> и надеюсь на автокомплит, но редактор не видит методов

646