2010-08-24 237 views
1

我正在嘗試創建一個可以通過ssh連接到我的Qnap TS219服務器並在其上運行命令的php腳本。從PHP運行shell腳本

到目前爲止,我的腳本可以很好地連接到服務器,但是當我運行該命令時,我收到一條錯誤消息,我無法弄清楚。

exec.sh

#!/bin/bash 
cp /share/MD0_DATA/Qdownload/rapidshare/admin/script.txt /share/MD0_DATA/Qdownload/rapidshare/admin/script.sh 
chmod 755 /share/MD0_DATA/Qdownload/rapidshare/admin/script.sh 
nohup sh /share/MD0_DATA/Qdownload/rapidshare/admin/script.sh & 
exit 0 

script.sh

#!/bin/bash 
/opt/bin/plowdown -o /share/MD0_DATA/Qdownload/rapidshare /share/MD0_DATA/Qdownload/rapidshare/admin/down.txt 2>/share/MD0_DATA/Qdownload/rapidshare/admin/output.txt 

,我當前正在運行的直通SSH我提交表單之後的命令:

echo $ssh->exec('sh /share/MD0_DATA/Qdownload/rapidshare/admin/exec.sh'); 

眼下生成下面的代碼,但只有在我殺死2個bash進程後(頁面不斷加載,處理器活動在10 0%如果我不殺2的bash進程):

/share/MD0_DATA/.qpkg/Optware/share/plowshare/lib.sh: line 261: getopt: command not found start download (rapidshare): http://rapidshare.com/files/312885386/Free_Stuff-Your_Internet_eBay_Business_Free_Startup_Resources.rar /share/MD0_DATA/.qpkg/Optware/share/plowshare/lib.sh: line 261: getopt: command not found /share/MD0_DATA/.qpkg/Optware/share/plowshare/lib.sh: line 46: --insecure: command not found Error: failed inside rapidshare_download() 

這個腳本會在我的本地網絡,沒有從外部接入一起使用,所以我不擔心安全問題,我知道代碼看起來很基本的,原始的,但我沒有使用PHP,shell腳本的經驗,所以如果有人可以對此做任何意義,並幫助我將不勝感激。

Edit1。我也嘗試過shell_exec命令,但仍然沒有喜悅,如果我通過膩子作品精美地運行腳本。

Edit2。我認爲我們正在做點什麼。

我添加了您建議的代碼,並且收到以下消息。

sh: /share/MD0_DATA/.qpkg/Optware/share/plowshare: is a directory /usr/bin:/bin:/usr/sbin:/sbin 

我想此刻的PATH是USR /斌:/ bin中:usr/sbin目錄:/ sbin目錄,我想這應該是的/ opt/bin中的/ opt/sbin目錄,因爲那裏是 「可執行文件」。任何ideeas?

謝謝, 克里斯。

+0

你試過passthru()或system()嗎? – 2010-08-24 09:18:31

+0

剛剛嘗試過他們,沒有運氣...甚至沒有生成錯誤代碼...我用system和passtrhu替換了exec命令(希望這是我想要的方式)...謝謝你答覆,保羅。 C. – Chris19 2010-08-24 10:10:45

+0

如果可能的話,你應該使用Bash內建'getopts'而不是外部'getopt'。請參閱「getopts」一節[此處](http://mywiki.wooledge.org/BashFAQ/035)。 – 2010-08-24 15:05:07

回答

3

運行此

echo $ssh->exec('pwd'); 

是否正確地列出你的路徑?如果是這樣,那麼你的問題不是PHP,如果它沒有列出或仍然給出錯誤,那麼PHP是你的問題,我們可以從那裏繼續。

從你列出的錯誤中,我的第一個猜測是PATH沒有設置,所以lib.sh無法找到它所需要的。

記住你正在使用自定義shell(PHP ssh)登錄,通常情況下沒有設置它們應該是的,所以你的腳本可能找不到像路徑和變量這樣的需求。

編輯: 因爲它給/根,我們至少知道它會通過,何不也設置PATH等等

echo $ssh->exec('PATH=$PATH;/share/MD0_DATA/.qpkg/Optware/share/plowshare; sh /share/MD0_DATA/Qdownload/rapidshare/admin/exec.sh'); 

記住,你也可以用它來看看什麼是和ISN沒有被設置。

echo $ssh->exec('ECHO $PATH'); 
+0

/root 這就是我得到的結果我運行上述命令。 我正在考慮關於所需文件的路徑的同樣的事情,但不知道如何解決它...... :(...希望有人會幫助我出去。 – Chris19 2010-08-24 14:16:49

+0

更新了我的答案 – 2010-08-24 14:50:50

+0

我更新了我的問題。 – Chris19 2010-08-24 15:35:10

0

我想我明白了:

繼viper_sb邏輯,我改變了代碼:

echo $ssh->exec('PATH=$PATH:/share/MD0_DATA/.qpkg/Optware/bin; sh /share/MD0_DATA/Qdownload/rapidshare/admin/exec.sh'); 
echo $ssh->exec('echo $PATH'); 

和魔法,它的工作...我會進一步測試它,當我回到家,但我認爲它工作,一個文件被下載到/ Qdownload/rapidshare文件夾中... hooray。