簡體   English   中英

在php中運行bash腳本

[英]running bash scripts in php

我有兩台電腦。 在第一台計算機上,我運行了所有網絡代碼的apache。 在第二台計算機上,我使用檢索腳本存儲了大量數據(腳本通常需要數小時才能運行)。 我本質上是創建一個Web UI來訪問這些數據,沒有任何時間延遲。

所以我打電話給:

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( /usr/bin/ssh或安裝它的地方而不僅僅是ssh

  2. 確保正在運行的用戶apache / PHP正確設置為ssh到othermachine而不需要輸入密碼。 顯然,如果SSH要求輸入密碼,那么沒有人可以輸入密碼,因此它似乎什么也沒做。

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

  4. 嘗試一些不同的標志來ssh。 -n一樣專門用於在后台運行ssh命令。

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

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

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

另外嘗試exec(“/ bin / bash /path/to/script.sh”); 也許php沒有找到bash的路徑。 您必須查看apache日志以獲取其他信息。

暫無
暫無

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

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