2017-07-29 57 views
0

我使用http://phpseclib.sourceforge.net/來連接到我的SSH併爲我的節點服務器運行一些命令。使用phpseclib的PHP SSH命令

其工作完全使用:

echo "Restart...<br>"; 
echo "<pre>"; 
echo $ssh->exec('forever restartall'); 
echo "</pre>"; 

然而,當我使用下面的代碼並不顯示任何內容或運行任何程序:

echo "Starting...<br>"; 
echo "<pre>"; 
echo $ssh->exec('cd /var/www/html/game-api'); 
echo $ssh->exec('forever start server.js > stdout.txt 2> stderr.txt &'); 
echo "</pre>"; 

命令完美的作品,如果我跑它直接來自終端。

有什麼想法?

回答

0

引用http://phpseclib.sourceforge.net/ssh/examples.html#chdir

echo $ssh->exec('pwd'); // outputs /home/username 
$ssh->exec('cd /'); 
echo $ssh->exec('pwd'); // (despite the previous command) outputs /home/username 

連續調用給exec()

如果一個交互的shell完成後,將(取決於你收到的第一 PWD輸出如何設置您的系統)與第二個pwd的輸出不同 。上面的代碼片段,但是, 將產生兩個相同的行。

原因是一旦exec()運行並且通道 已被刪除,您對 一次性shell執行的任何「狀態更改」都會消失。

您可以通過執行$ssh->exec('cd /; pwd')

在Linux上解決此