Здравствуйте! Есть такой скрипт на 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 не вариант пока.
Если из под браузера то можно распаралелить , отправив операцию конекта и проверки в отдельную нитку если по простому то можно юзать pcntl_fork();
если есть доступ к shell то можно как то так:
seq 600| parallel php your_script.php {} > log_check_ssh{}
Тоесть запустить ваш скрипт 600 раз где {} порядковый номер вашего соединения из массива соединений а в скрипте считывать этот номер через $argv[1]
, так вы паралельно выполните 600 проверок и сохраните каждую проверку в лог с именем log_check_ssh{}
.
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создал класс, внутри класса переменную $dbh и присвоил ему PDOДалее обращаюсь к $this->dbh-> и надеюсь на автокомплит, но редактор не видит методов