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


Live output of shell script using `watch` in browser?

我看到PHP读取shell_exec实时输出和PHP:在web浏览器中输出system/shell_exec命令输出,但无法获得以下工作

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

live.sh

uname -a
date
watch --no-title date

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>';
?>

浏览器可以正常显示unamedate的输出,但不能显示watch的输出。

我真的在尝试不可能的事吗?

我建议不要使用watch,你可能会遇到比你想象的更多的麻烦。

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

然后,watch可能使用终端序列来清除屏幕,我不确定这如何转换为输出代码。

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

这篇关于SO的文章将帮助你开始。jQuery,简单轮询示例

上面的页面使用jquery库,但是如果你愿意,你也可以使用原生Javascript。

最简单的例子是:

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

在你的页面中,为你的结果设置一个容器

<div id="output_container"></div>

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

您可能只在某些特殊情况下需要这样做。因此,对于这些,您可以尝试ajaxterm

真的很容易使用,(4)。行安装)

wget http://antony.lesuisse.org/software/ajaxterm/files/Ajaxterm-0.10.tar.gz
tar zxvf Ajaxterm-0.10.tar.gz
cd Ajaxterm-0.10
./ajaxterm.py

,您将得到完整的bash在浏览器中交互式运行。(登录/密码后)。用python写的,所以很容易适应你。