我正在尝试向Debian服务器发送一些命令,这些命令需要30秒才能完成,这很好但是每当我的网络服务器上有人点击按钮(告诉php用phpseclib运行命令)时网站只是冻结(如果您尝试访问它,它只会继续加载和加载),直到所有命令都已运行或直到超时。
代码
$this->_ssh = new Net_SSH2($this->_ip);
if(!$this->_ssh->login($this->_username, $this->_password))
die('Could not connect with SSH: Login failed!');
$cd_to_subdir_command = 'cd ' . $this->_path . "\n";
$rmdir_command = '[ -d ' . $this->_screen . ' ] || rm -rf ' . $this->_screen;
$mkdir_command = 'mkdir ' . $this->_screen;
$extract_command = 'tar -xzf hlds_no_amxx.tar.gz -C ' . $this->_screen . "\n";
$chmod_command = 'chmod -R 777 ' . $this->_screen . "\n";
$this->_ssh->read(':~$');
$this->_ssh->write($cd_to_subdir_command . "\n");
$this->_ssh->write($rmdir_command . "\n");
$this->_ssh->write($mkdir_command . "\n");
$this->_ssh->write($extract_command . "\n");
$this->_ssh->write($chmod_command . "\n");
$this->_ssh->setTimeout(30); // 30 seconds timeout to give it time to extract because the file is really big
$this->_ssh->read();
我需要网络服务器不这样做,因为显然30秒的加载时间是一种痛苦,更不用说只有一个用户可以一次做一些东西。
答案 0 :(得分:3)
如果您不需要立即获得结果,我会将代码放在外部脚本/ php文件中并且只运行
$this->ssh->exec('nohup php /full/path/file.php');
您可以在结尾处删除超时,然后让文件执行它必须执行的任何操作。 nohup把它放在后台。
答案 1 :(得分:1)
我看错了方向。 这里的问题不是服务器挂起或发送SSH命令时的类似内容。
我正在使用ajax来调用其中包含SSH代码的函数。在这种情况下,SSH代码是无关紧要的。 Web服务器只能处理来自客户端的一个ajax请求,因此在ajax请求返回成功或错误之前,客户端将无法使用该网站。
TLDR:这不是一个需要解决的问题。它的ajax是罪魁祸首,而不是ssh或debian服务器。