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

时间:2014-08-15 12:42:35

标签: php apache shell

我看过PHP reading shell_exec live outputPHP: Outputting the system / Shell_exec command output in web browser,但无法完成以下工作。

注意:最初,我的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输出没有。

我实际上是在尝试不可能吗?

2 个答案:

答案 0 :(得分:5)

我会反对使用手表的方法,你可能比你预期的更麻烦。

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

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

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

这篇关于SO的文章将帮助您入门。 jQuery, simple polling example

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

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

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

setInterval(function(){ poll(); }, 5000);

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

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

在您的示例中,您从脚本中删除了手表,并将其替换为您要观看的命令。

答案 1 :(得分:1)

你可能只想要一些特别的东西。因此,对于那些您可以尝试 ajaxterm

非常好用,(4.line安装)

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编写,很容易适应你。另外,see here