继续使用ssh2_exec在远程服务器上显示长时间运行的bash的结果

时间:2014-10-22 08:13:40

标签: php bash shell ssh stream

我有什么

这是有效的,但我希望获得长时间运行脚本的结果

启动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 个答案:

答案 0 :(得分:2)

好的,我明白这是不可能的。

我的解决方案是:

在后台运行脚本并将结果写入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&gt;&amp; 1

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