簡體   English   中英

從php運行shell腳本

[英]run shell script from php

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

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

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進程之后才執行(如果我不殺死2個bash進程,則該頁面將繼續無限期加載,並且處理器活動處於100%):

/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:/ bin:usr / sbin:/ sbin,我認為它應該是/ opt / bin / opt / sbin,因為這里有“可執行文件”。 有什么想法嗎?

謝謝,克里斯。

運行這個

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

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

從您列出的錯誤中,我的第一個猜測是未設置PATH,因此lib.sh找不到所需的內容。

請記住,您是使用自定義外殼(PHP ssh)登錄的,通常情況下未設置應有的設置,因此您的腳本可能找不到路徑和變量之類的要求。

編輯:由於它提供了/ root,我們至少知道它正在執行,為什么不還要設置PATH等...

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

記住,您還可以使用它來查看正在設置和未設置的內容。

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

我想我明白了:

按照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文件夾中……萬歲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM