【问题标题】:shell output to webshell 输出到网络
【发布时间】:2011-08-01 13:15:04
【问题描述】:

我需要一种在网页上显示 linux shell 输出的方法。我知道有很多 webshel​​l,但它们都没有让我显示时间变化的输出(使用以下命令:top、watch...),我需要一个基于 shell 的网络分析器,所以我每次都无法启动和停止它,因为它需要连续运行。 有什么简单的方法可以做到这一点吗?我不需要与 shell 进行任何交互,只需要给定命令的输出即可。

提前致谢 洛波克

【问题讨论】:

  • 将输出写入文本文件并显示文件...
  • 让命令执行一次,输出并退出。然后每次您请求显示输出的页面时,它将被刷新。此外,您可以在 HTML 头标签中设置一个元标题,该标签将自动刷新页面 - 或者 - 如果浏览器支持(例如 Opera),您可以在浏览器中设置刷新。
  • 这并不容易......像 top 这样的命令不会终止,因此没有简单的方法将其输出重定向到文件。
  • 我想做类似的事情并构建了nubs.narf.io——在我的例子中,我想在浏览器中查看日志的输出。您可以安装 nubs cli 并执行 tail -f /var/log/whatever.log | nubs http://nubs.narf.io/o/whatever.log 之类的操作,并在 nubs.narf.io/o/whatever.log 处查看输出。让我知道你是否觉得它有用。

标签: php linux bash shell


【解决方案1】:

在 PHP 中你可以使用exec(): http://www.php.net/manual/en/function.exec.php

$last = exec('ls', $o, $r);

$o 将保存输出,$r 将保存返回码,$last 将保存最后一行输出。一般来说,您通常会像这样使用它:

$last = exec('ls', $o, $r);
if ($r != 0)
{
  print 'Error running command';
  exit($r);
}
else
  print implode("\n", $o);

top 是一个交互式程序,该命令将永远持续下去,PHP/exec() 将继续等待它完成。您可以将top -b -n1 用于“批处理模式”。有关 top 参数的更多信息,请参阅top(1)

如果您想要一个适用于任何命令的更通用的解决方案,您可以使用从 xmlrpc 脚本运行的popen()(或proc_open())。这是一个复杂得多的设置,并且需要一些有关 UNIX 进程控制的知识。正确地做到这一点绝非易事......

PS:top 的参数因操作系统而异。在 Linux 上,您使用 top -b -n 1,在 FreeBSD 上是 top -b 999(其中 999 是要显示的行数)。不确定这对您是否重要,但最好放在脑后。

【讨论】:

    【解决方案2】:

    根据您启动的程序,应该有类似的开关

    $ top -n1
    

    这将以快照的形式为您提供您正在寻找的输出。

    只需让输出的 php 脚本在您需要的秒数后自行刷新。

    一种适用于大多数浏览器的流行方法是添加一个所谓的Meta Refresh

    <meta http-equiv="refresh" content="5">
    

    示例:五秒后刷新实际页面。

    【讨论】:

      【解决方案3】:

      如果您不想学习另一种语言,您可能需要查看已经支持的通用 CGI 模块

      【讨论】:

        【解决方案4】:

        quick google search 产生 javassh.org。我确定还有其他人。

        【讨论】:

          猜你喜欢
          • 2011-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-28
          • 2015-02-23
          • 2017-04-06
          • 1970-01-01
          相关资源
          最近更新 更多