phpseclib将挂起Web服务器,直到所有命令都运行完毕

phpseclib将挂起Web服务器,直到所有命令都运行完毕,php,phpseclib,Php,Phpseclib,我正在尝试向Debian服务器发送一些命令,这些命令需要30秒才能完成,这很好,但每当我的Web服务器上有人单击按钮(它告诉php使用phpseclib运行命令)时,整个网站就会冻结(如果您尝试访问它,它只会不断加载)直到所有命令都已运行或超时 代码 我需要Web服务器不要这样做,因为显然30秒的加载时间是一件痛苦的事情,更不用说一次只有一个用户能够完成任务。如果您不立即需要结果,我会将代码放在外部脚本/php文件中,只运行 $this->ssh->exec('nohup php /

我正在尝试向Debian服务器发送一些命令,这些命令需要30秒才能完成,这很好,但每当我的Web服务器上有人单击按钮(它告诉php使用phpseclib运行命令)时,整个网站就会冻结(如果您尝试访问它,它只会不断加载)直到所有命令都已运行或超时

代码


我需要Web服务器不要这样做,因为显然30秒的加载时间是一件痛苦的事情,更不用说一次只有一个用户能够完成任务。

如果您不立即需要结果,我会将代码放在外部脚本/php文件中,只运行

$this->ssh->exec('nohup php /full/path/file.php');

您可以在最后删除超时,让文件执行它必须执行的任何操作。诺胡普把它放在背景中。

我看错了方向。 这里的问题不是发送SSH命令时服务器挂起或类似的问题

我使用ajax调用包含SSH代码的函数。在这种情况下,SSH代码是不相关的。Web服务器只能处理来自客户端的一个ajax请求,因此,在ajax请求返回成功或错误之前,客户端将无法使用该网站


TLDR:这不是一个需要解决的问题。这里的罪魁祸首是ajax,而不是ssh或debian服务器。

这是不正确的,如果你按照我的回答去做,你的ajax调用会在不到一秒钟内完成,不管在后台调用了多少代码。我尝试了你的代码,但没有效果。请解释/full/path/file.php中的脚本类型?因为我刚刚把phpseclib放在那里,但必须有另一种方式,因为文件在实际的服务器中。您想在问题中运行的所有命令都需要在脚本中(不带phpseclib参数)。我的代码行只是调用脚本并将其放在后台,而程序的其余部分可以在那时做任何你想做的事情。如果脚本在同一台服务器上,甚至可以用exec(…)调用它。
$this->ssh->exec('nohup php /full/path/file.php');