2013-11-22 2 views
2

Я столкнулся с этой проблемой в течение 2 недель, я использую phpseclib для отправки команд из Интернета в маршрутизатор для выполнения разных действий, один из которых - перезапуск сетевого интерфейса маршрутизатора , Я могу перезапустить сетевой интерфейс, но после запуска этой команды весь apache зависает и не реагирует на какой-либо другой HTTP-запрос, я использую phpseclib 0.3.5. Большое спасибо за помощь первойперезапуск nic с phpseclib зависает весь 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, но я понятия не имею, как это решить. Любая помощь будет оценена.

Update: Я только что сделал эксперимент, всякий раз, когда я запускаю выше команды SSH, веб-сервер занимает 15,3 минут, чтобы обработать другой запрос ... http://i102.photobucket.com/albums/m112/ihmcjacky/Mobile%20Uploads/000_zpscc73f7f0.jpg

+0

Если сетевой интерфейс перезапускается, то вызов 'setTimeout' ничего не будет делать, поскольку в этот момент phpseclib потерял бы свое собственное соединение, и это phpseclib, проверяющий, сколько времени прошло, а не сервер , На самом деле, я думаю, проблема здесь в том, что вы перезапускаете ник. Похоже, что все остальные команды - кроме этого - работают? – neubert

ответ

0

Для Нойберт: Спасибо за обратную связь, на самом деле большинство команд работают хорошо, используя phpseclib.

Ссылаясь на сервер не отвечает, если это неизбежно, могу ли я сократить «мертвый период» на сервере? Или любые другие приемлемые решения по этому поводу?