Продолжайте показывать результат длительного запуска bash с ssh2_exec на удаленном сервере

Что я имею

Это работает, но я хочу получить результат длительных скриптов

Запустите сценарий sh и затем вызовите функцию ajax, которая проверяет каждые 2 секунды и показывает результат. Это возможно?

$connection = ssh2_connect('192.168.1.1', 22);
ssh2_auth_password($connection, 'user', 'password');
$stream = ssh2_exec($connection, 'sh /test.sh');

stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);

echo stream_get_contents($stream_out);

Что я буду

$connection = ssh2_connect('192.168.1.1', 22);
ssh2_auth_password($connection, 'user', 'password');
$stream = ssh2_exec($connection, 'sh /test.sh');
$session->stream = $stream;  <-##### Here i save it in a session ######

########################################################
I want to save the Stream in a session variable
and check the result anytime while the process is still running
Is this possible ?
##########################################################

$stream = $session->stream;   <-##### Here i get it from the session ######
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);

echo stream_get_contents($stream_out);

Когда я делаю это, я получаю следующую ошибку:

stream_set_blocking() expects parameter 1 to be resource, integer given

1

Решение

Хорошо, я понимаю, что это невозможно.

Мое решение:

Запустите скрипт в фоновом режиме и запишите результаты в output.txt

$stream = ssh2_exec($connection, 'sh /test.sh > output.txt &');

И читать выходной файл каждые 2 секунды, чтобы я мог следить за процессом.
в конце скрипта он будет отображать «ProcessFinished», поэтому с этим флагом вы знаете, что он завершен с запуском, и вам больше не нужно проверять output.txt.

$stream = ssh2_exec($connection, "cat output.txt");

stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
$processStatus = stream_get_contents($stream_out);
echo $processStatus;

РЕДАКТИРОВАТЬ:

Если вы также хотите ошибки, вы можете поставить 2>&1 в конце

$stream = ssh2_exec($connection, 'sh /test.sh > output.txt 2>&1 &');
2

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

Других решений пока нет …

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