2010-03-29 148 views
1

我有兩臺電腦。在第一臺計算機上,我用所有的Web代碼運行Apache。在第二臺計算機上,我有大量數據與檢索腳本一起存儲(腳本通常需要幾小時才能運行)。我本質上是創建一個Web UI來訪問這些數據,而不會有任何時間延遲。在php中運行bash腳本

所以我呼籲:

exec("bash initial.bash");

這是一個驅動程序的腳本是在我的Apache的文件夾。它在另一臺計算機上調用腳本。 電話: ssh otherMachine temp.bash&

此腳本調用第二臺計算機上的數據檢索腳本。

如果我在終端中調用initial.bash,一切運行順利併成功,但如果我在我的PHP文件中調用它,那麼我的所有命令都在initial.bash中運行,但ssh otherMachine temp.bash&例外。我把&放在最後,所以temp.bash會在後臺運行,因爲它需要幾個小時才能完成。

我不確定爲什麼在Apache調用嵌套腳本時沒有運行。有沒有比使用exec或shell_exec來調用最終調用另一個腳本的腳本更好的選擇。我不直接在第二臺機器上調用腳本的原因是因爲程序運行的時間。在腳本完成之前,Shell_exec不會呈現php頁面。

回答

1

我的猜測是SSH不喜歡用戶php運行在下?你說它在終端上工作正常 - 你是否以相同的php用戶身份登錄?

您可能還會發現某種更好的解決方案的消息隊列。

0

您可以使用cron(預定)作業。 Cron作業通過使用bash腳本定期檢索數據。

另外嘗試exec(「/ bin/bash /path/to/script.sh」);也許php沒有找到bash的路徑。您必須查看apache日誌以獲取更多信息。

3

一對夫婦建議:

  1. 嘗試把完整路徑SSH(/usr/bin/ssh或無論它的安裝,而不是僅僅ssh

  2. 確保用戶阿帕奇/ PHP下運行設置無需詢問密碼就能正確地將ssh發送到其他機器。顯然,如果SSH要求輸入密碼,那裏沒有人輸入密碼,所以它看起來什麼都沒做。

  3. 嘗試重定向輸出,以及 - ssh othermachine temp.bash >/dev/null 2>&1 &

  4. 嘗試一些不同的標誌爲SSH。像-n這是專門爲在後臺運行ssh命令而設計的。

+0

+1所有偉大的建議。 – 2010-03-29 18:51:14