2015-02-24 35 views
0

我写了一段代码,将在服务器上安装一个软件。它完全适用于代码的一部分。ssh write()read()过早退出

当我开始使用read()和write()它做它应该做的。我告诉它yum安装几个软件,然后启动屏幕,所以当页面失败时,软件的安装仍然会继续。所以这一切都很顺利。然后,我开始安装vestacp为例。

$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("yum install screen wget -y\n"); 
$ssh->setTimeout(10); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("screen\n"); 
$ssh->setTimeout(10); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("curl -O http://vestacp.com/pub/vst-install.sh\n"); 
$ssh->setTimeout(10); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("bash vst-install.sh\n"); 
$ssh->setTimeout(10); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("y\n"); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("[email protected]\n"); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("vps.yourdomain.com\n"); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$output = $ssh->read('/.*@.*[$|#]|.*[P|p]assword.*/', NET_SSH2_READ_REGEX); 

因此它开始安装过程。这一切都是从ajax函数激活的,并且存储在输出中的数据由div中的jquery显示。

但是,这里是问题所在。大约一分钟后,ajax获取成功数据并输出一个div中的$输出。当我打开命令行并重新附加屏幕-r我看到安装仍在运行。这也是我使用屏幕的原因,所以我确信即使在浏览器出现问题时该过程仍会继续。

所以,现在我正在寻找一个解决方案,以确保我看不到输出过早。如果我要安装耗时两小时的东西,该怎么办?我希望它能显示我的加载动画2小时。这非常重要,或者它希望软件的安装速度要快得多。

谁能帮到我。

谢谢。

+0

如果从命令行执行命令,它可以正常运行吗? Ajax有一个连接的时间限制,你可能会在安装完成之前达到它的限制... – Lars 2015-02-24 03:08:47

+0

是的,它在命令行或脚本运行时运行良好。只是阿贾克斯太快输出结果。 – carlosx2 2015-02-24 10:56:45

+0

我应该使用超时和同步来使其等待,直到过程结束将超时设置为最多2小时。 – carlosx2 2015-02-24 11:02:51

回答

0

我的问题的解决方案非常简单,超时是问题,因为它被设置为10.这意味着它在服务器等待连接或执行进程时输出。增加它解决了这个问题。