在浏览器中使用`watch`实时输出shell脚本?

jez*_*mck 1 php apache shell

我已经看过PHP读取shell_exec实时输出PHP:在Web浏览器中输出system/Shell_exec命令输出,但无法获得以下工作.

注意:最初,我的shell脚本运行了一些python,但我简化了它.

live.sh

uname -a
date
watch --no-title date
Run Code Online (Sandbox Code Playgroud)

live.php

<?php
$cmd = "sh live.sh";

while (@ ob_end_flush()); // end all output buffers if any

$proc = popen($cmd, 'r');
echo '<pre>';
while (!feof($proc))
{
    echo fread($proc, 4096);
    @ flush();
}
echo '</pre>';
?>
Run Code Online (Sandbox Code Playgroud)

unamedate输出出现在浏览器不错,但watch不输出.

我其实是在尝试不可能的事吗?

cra*_*ter 5

我会反对使用手表的方法,你可能比你想象的更麻烦.

首先,长时间运行的命令可能会受到(默认)PHP超时的影响,因此您可能需要调整它.

然后,观看可能使用终端序列来清除屏幕,我不知道这是如何转换为输出代码.

我宁愿建议设置一个客户端机制来定期重复调用服务器端live.php.

SO上的这篇文章将帮助您入门. jQuery,简单的轮询示例

上面的页面使用jquery库,但如果你愿意,你可以使用原生的Javascript等价物.

最简单的例子(来自该页面)将是:

function poll(){
    $("live.php", function(data){
        $("#output_container").html(data);
    }); 
}

setInterval(function(){ poll(); }, 5000);
Run Code Online (Sandbox Code Playgroud)

在您的页面中,为结果设置容器

<div id="output_container"></div>
Run Code Online (Sandbox Code Playgroud)

在您的示例中,您从脚本中删除监视并将其替换为您要监视的命令.