2
我已經爲這個問題掙扎了2周,我用phpseclib從web發送命令給路由器執行不同的行爲,其中之一是重新啓動路由器的網絡接口,我很好重新啓動網絡接口,但運行命令後,整個apache凍結,並且不響應任何其他http請求,我使用的是phpseclib 0.3.5。非常感謝您的幫助第一用phpseclib重新啓動nic掛起整個apache
的Javascript
$.ajax({
ajax work here to call the runCMDAdvance function and with timeout specified
});
PHP
//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, "");
我的猜測是,執行重新啓動網絡接口時,將AP斷開連接,並以某種方式崩潰phpseclib,但我不知道如何解決這個問題。任何幫助將不勝感激。
更新: 我只是做了一個實驗,每當我運行上面的ssh命令,Web服務器需要15.3分鐘處理其他請求...... http://i102.photobucket.com/albums/m112/ihmcjacky/Mobile%20Uploads/000_zpscc73f7f0.jpg
如果網絡接口正在重新啓動,那麼'setTimeout'調用將不會執行任何操作,因爲在那個時候,phpseclib會丟失它自己的連接,它的phpseclib檢查是否已經過了多長時間 - 而不是服務器。真的,我認爲這裏的問題是你正在重新啓動nic。聽起來像其他任何命令 - 除了這一個 - 工作? – neubert