2

私はこの問題に2週間苦労しました。phpseclibを使用してWebからルーターにコマンドを送信し、さまざまな動作を実行します。そのうちの1つは、ルーターのネットワークインターフェイスを再起動することです。ネットワークインターフェイスを再起動するのは良いことですが、コマンドを実行した後、Apache 全体がフリーズし、他の http 要求に応答しません。私は phpseclib 0.3.5 を使用しています。最初に助けてくれてありがとう

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

4

1 に答える 1

0

neubert へ: フィードバックをありがとうございます。実際には、ほとんどのコマンドは phpseclib を使用して正常に動作しています。

サーバーが応答しないことについて言及し、やむを得ない場合、サーバーがハングする「デッド タイム」を短くすることはできますか? または、これに関する他の実行可能なソリューションはありますか?

于 2013-11-23T13:13:38.297 に答える