2015-02-24 48 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.這意味着它在服務器等待連接或執行進程時輸出。增加它解決了這個問題。