使用phpseclib重新启动nic会挂起整个apache

使用phpseclib重新启动nic会挂起整个apache,php,linux,apache,phpseclib,network-interface,Php,Linux,Apache,Phpseclib,Network Interface,我为这个问题苦苦挣扎了两周,我使用phpseclib从web向路由器发送命令以执行不同的行为,其中之一是重新启动路由器的网络接口,我很乐意重新启动网络接口,但在运行命令后,整个apache冻结,并且不响应任何其他http请求,我使用的是phpseclib 0.3.5。首先非常感谢你的帮助 Javascript $.ajax({ ajax work here to call the runCMDAdvance function and with timeout specified }); P

我为这个问题苦苦挣扎了两周,我使用phpseclib从web向路由器发送命令以执行不同的行为,其中之一是重新启动路由器的网络接口,我很乐意重新启动网络接口,但在运行命令后,整个apache冻结,并且不响应任何其他http请求,我使用的是phpseclib 0.3.5。首先非常感谢你的帮助

Javascript

$.ajax({
  ajax work here to call the runCMDAdvance function and with timeout specified
});
PHP

我的猜测是,当重启网络接口被执行时,AP断开连接并以某种方式使phpseclib崩溃,但我不知道如何解决这个问题。任何帮助都将不胜感激

更新: 我只是做了一个实验,每当我运行上面的ssh命令时,web服务器都需要15.3分钟来处理另一个请求。。。
致neubert:感谢您的反馈,实际上大多数命令都使用phpseclib运行良好


关于服务器无响应,如果不可避免,我可以缩短服务器挂起的“死区”吗?或者任何其他可行的解决方案?

如果重新启动网络接口,则
setTimeout
调用将不会执行任何操作,因为此时,phpseclib将失去自己的连接,而phpseclib正在检查经过了多少时间,而不是服务器。真的,我认为这里的问题是你正在重新启动nic。除了这个命令外,其他命令都能正常工作吗?
//function to run the command
function runCMDAdvance($sshIP, $cmd, $tVal,$tarIP){
        $ssh = new Net_SSH2($sshIP,$this->port);
        if (!$ssh->login($this->username, $this->password)){
            echo "Bad Login";
            return false;
        }
        //set timeout for running ssh command, should be done after the ssh object has been initialized
        $tVal>0 ? $ssh->setTimeout($tVal):"";

                        $res = $ssh->exec($cmd);
            $ssh->disconnect();
            return $res;
}

$cmd =  INCL_PATH . ' && ' . '/sbin/uci commit network && '.'/sbin/uci commit dhcp && '.'/etc/init.d/network restart 2>&1 && exit'."\n";

            $res = $ssh2_conn->runCMDAdvance($ip, $cmd, 20, "");