2014-07-23 62 views
0

我想要做的是:從瀏覽器|執行時shell_exec不起作用ssh | scp |凱基

  1. 從瀏覽器中執行 「shellUnlock.php」
  2. 然後 「scriptUNLOCK.sh」,從 「shellUnlock.php」
  3. 然後 「resultUNLOCK.log」 執行從scriptUNLOCK.sh
  4. 創建然後在瀏覽器

說明顯示 「resultUNLOCK.log」:

  • 對於SSH我使用的keygen,所以我不必再從我的服務器插入任何密碼。
  • 我用SCP將「da.serv.er」中創建的「resultUNLOCK.log」複製到我自己的文件夾中。
  • 我已經嘗試從瀏覽器,但它根本沒有輸出。
  • 腳本運行良好,當我從膩子執行,但從shell_exec它不工作。
  • 而我沒有權限在服務器上安裝任何東西。

我 「shellUnlock.php」 文件

$myfile = fopen("nameUSER.txt", "w") or die("Unable to open file!"); 
$txt = "USERNAME"; 
fwrite($myfile, $txt); 
fclose($myfile); 
shell_exec('./scriptUNLOCK.sh'); 
if (file_exists("resultUNLOCK.log")) 
    echo readfile("resultUNLOCK.log"); 
}else{ 
    echo "Please Try"; 
} 

我 「scriptUNLOCK.sh」 腳本

#!/bin/bash 
HOST='[email protected]' 
HOME='/home/web/UNLOCK' 
DIR='/somewhere/script/UNLOCK/' 

cd ${HOME} 
while read nameUSER 
do 
ssh ${HOST} <<END_SCRIPT 
cd ${DIR} 
unlock.sh ${nameUSER} > resultUNLOCK.log 
exit 
END_SCRIPT 
cd ${HOME} 
scp ${HOST}:${DIR}resultUNLOCK.log ${HOME} 
done < nameUSER.txt 

現在,請幫助我。我完全困惑。謝謝。

+0

這可能是權限問題。劑量的網絡服務器用戶有寫權限的日誌文件 –

+0

我會說這可能是一個權限問題。如果你從命令行成功執行了shell腳本,但它不能在網頁上運行,這可能是因爲在第一種情況下你使用用戶權限運行它,而在第二種情況下它是apache用戶... – lpg

+0

你會要把'ls -la/somewhere/script/UNLOCK /'的輸出放在這裏? – mudasobwa

回答

0

如果腳本在命令行運行時運行正常,但它不會在您通過網絡服務器觸發時運行,它必須是權限或/和路徑問題。

確保apache用戶(www-data,默認爲www或apache)具有對UNLOCK文件夾的寫入權限,我認爲它可以工作。 而且你應該改變你的「HOME」變量的名字,因爲HOME在Linux中是一個修復的環境變量。我不知道這是否是一個問題,但我會改變名稱以避免混亂。

最好的辦法是通過組

sudo usermod -a -G www-data <apache_user> 
    sudo chgrp -R www-data /somewhere/script/UNLOCK/ 
    sudo chmod -R g+w /somewhere/script/UNLOCK/ 

讓它這樣至少你用膩子通過登錄必須有權限的用戶修改目錄的訪問能力。如果沒有,您可以聯繫您的系統管理員或使用您有權訪問的其他文件夾。

我希望這會有所幫助。 親切的問候

0

我的問題解決了!

而是在php中使用shell_exec,我直接使用crontab執行腳本。 如果我沒有時間限制,我確信我可以找到其他最好的解決方案來解決這個問題。 但時間迫使我。 :D 至少它工作得好!

謝謝所有..!

+0

什麼是可怕的解決方案。 我真的建議你至少試一試,它會花5分鐘:1.給shellcript的完整路徑2.設置權限。歡呼聲 – Yanik

+0

我已經完成了2個步驟的兄弟,它仍然沒有工作。這就是爲什麼我決定可怕的解決方案。大聲笑。 –