0

我正在创建一个页面,该页面在远程服务器上执行 shell 脚本以扫描网站并在屏幕上输出结果。根据被扫描站点的大小,有时可能需要一段时间才能获得输出。目前,该脚本可以正常工作并执行其应有的工作,但问题是当我扫描较大的站点时,它会停止运行,并且在托管该网站的平台上,我无法更改 30 秒的超时。

我想知道保持连接活跃的最佳方法是向屏幕发送点还是保持连接活跃的其他方式。

这是我的脚本

$ssh = new Net_SSH2('hostname');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

$ansi = new File_ANSI();
$ssh->enablePTY();
$ssh->setTimeout(60);
$ssh->exec("./test.sh | awk 'NR >= 16 {print}'\n");
$ansi->appendString($ssh->read());
echo $ansi->getHistory();

非常感谢任何帮助或指导。

4

3 回答 3

0

不要尝试在网页中执行长时间运行的脚本。

如果您需要来自另一个系统的响应并且您具有 SSH 访问权限,则将任务的调用和结果的收集分成 2 个单独的步骤(请参阅上面的链接及其链接到的讨论以获取有关如何进行调用的一些提示) . 在第一页上放置一个定时重定向到第二页。

于 2018-10-19T22:50:01.797 回答
0

您所指的超时很可能是脚本执行时间限制[在共享主机上很常见]

可悲的是,您对此无能为力。

但是,您可以做的是[如果您可以控制调用脚本的服务器]是

  1. 将请求发送到远程服务器 [包括 webhook 回调 url]
  2. 让脚本做它的事情
  3. 让脚本运行 webhook 来处理结果

当然,这也对应该如何处理/显示有影响,但我没有足够的信息来详细说明这个答案。

于 2018-10-19T22:32:39.160 回答
0

您应该让页面加载并运行一个 AJAX 请求,该请求将等待端口上的回复/侦听,而不是试图保持连接处于活动状态。

所以在用户方面,它会向 php url 运行一个ajax请求(javascript),然后在成功时显示结果。

$.ajax({
  url: "/thescript.php":,
  type: "POST",
  datatype: "POST"
  success: function(){
    //do display stuff
  }

});

可能会增加一个合理的超时时间。

于 2018-10-19T22:43:25.783 回答