如何使用shell脚本的输出动态更新网页?

时间:2014-03-07 20:01:56

标签: shell web

我有一个unix shell脚本,随着时间的推移生成输出,我希望将其输出到一个网页,该网页会在显示时显示它。

有一种简单的方法吗?我尝试过“Transfer-Encoding:chunked”,它不起作用,AJAX也不是那么简单。感谢。

3 个答案:

答案 0 :(得分:1)

简单的方法:如果将输出保存到网站中的某个文本文件中,则可以将其嵌入到iframe中。然后,您可以在父页面中使用JavaScript定期重新加载iframe,或者如果您不能使用脚本,则可以使用HTTP刷新。

更优雅的解决方案是使用类似jQuery.get()的内容来检查更新并将其写入页面。这是一个例子:http://jsfiddle.net/S9nYE/1/(小提琴并没有做太多,因为它没有指向真实文件,但我已经在我的网络服务器上测试了代码)

如何设置:将命令输出到文件中,比如说网络根目录中的log.txt,将小提琴代码放入同一文件夹中的HTML文件中,然后编辑var fileToCheck = "log.txt"(或无论调用什么文件)。然后,在浏览器中加载HTML文件。更改checkInterval以更改更新速度。

无论哪种方式,请注意,如果此命令可能会泄露您系统的详细信息,那么该网页将被正确锁定。如果它非常敏感,则可以更轻松,更安全地进入您的系统tail -f logfile

答案 1 :(得分:0)

您可以在您的网站上或通过api调用创建原始输出文件,然后编写一个小的html / javascript页面,可以通过AJAX查询输出文件并将其插入页面。

答案 2 :(得分:0)

Transfer-Encoding: Chunked是您所需要的,但您还需要确保Web服务器也已禁用压缩;虽然它的意思是使用压缩,我无法得到一个分块编码和mod_deflate与Apache一起很好地发挥 - 这是我用Perl CGI连续提供数据的问题。它涉及将Set-Env no-gzip 1放入我的CGI所在的文件夹.htaccess

如果有疑问,请启动Wireshark跟踪并尝试确切了解线路上的内容。

唯一要提及的是确保脚本不缓冲输出。如果这是一个bash / ksh / * sh脚本,那么您可能需要使用stdbuf命令覆盖缓冲区(coreutils; this is a good primer的一部分用于控制缓冲)。

如果你在Perl中写这个,请确保它没有$|=1

一旦你知道线路上发生了什么,你就会知道你需要调整它的脚本或网络服务器(或两者!)。