многопоточность — как заставить PHP загружаться без ожидания ssh2

В настоящее время у меня есть сценарий, который использует SSH2 для выполнения программы c на сервере, однако веб-страница занимает x секунд, чтобы загрузить, что сценарий ждет. Есть ли способ заставить php отправить команду через ssh и не ждать ответа? Спасибо
Мой текущий код:

<?php
$ssh = ssh2_connect('********', 22);
ssh2_auth_password($ssh, 'root', '**********');
$stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
fclose($stream);
?>

(IP-адрес и пароль цензурированного сервера по понятным причинам)

2

Решение

С помощью http://phpseclib.sourceforge.net/

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('********', 22);
$ssh->login('root', '**********');
$ssh->enablePTY();
$ssh->exec('nohup ./sr1 80 4 400 400 20 &');

Вы можете попробовать это с и без nohup и & но я думаю, что они необходимы.

1

Другие решения

Вы можете запустить свой код в Нить чтобы запустить его асинхронно:

<?php
class MySsh extends Thread {
public function run() {
$ssh = ssh2_connect('********', 22);
ssh2_auth_password($ssh, 'root', '**********');
$stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
fclose($stream);
}
}
$mySsh = new MySsh();
var_dump($mySsh->start());
?>

Обратите внимание, что использовать Threads в php, вам нужно иметь Pthreads библиотека установлена.

0

ssh2_connect, ssh2_auth_password требуется для входа по ssh.

ssh2_exec выполняет команду с указанным вторым аргументом ‘./sr1’. Можете ли вы представить, что именно это делает с фрагментами?

Во-вторых, ssh2_exec: выполнить команду на удаленном сервере. и я думаю, что он будет ждать, пока ваша команда завершит выполнение, а затем вернется.

Можете ли вы попробовать использовать ssh2_shell: запросить интерактивную оболочку

Вероятно, вы можете открыть оболочку и вызвать команду для запуска в фоновом режиме или в другом процессе и выхода из оболочки. Я думаю, что это может быть быстрее, чем ssh2_exec.

0
По вопросам рекламы [email protected]