2015-02-06 78 views
0

我想從PHP5啓動一個linux shell腳本,它將運行24小時,但我希望網頁在幾秒內返回。我雖然可以通過使任務的腳本產生來解決這個問題,但它似乎並不奏效。PHP5,Shell_exec等待衍生的linux shell任務完成

我一直在尋找一個解決方案或「一槍/火,忘了」選項幾天沒有任何運氣。

以下示例顯示了該問題。

在PHP 5我提出以下調用之一(嘗試了很多它這一點)

passthru("dummy_script.sh"); 

system("dummy_script.sh"); 

shell_exec("dummy_script.sh"); 

的虛擬腳本看看以下:

#!/bin/sh 
{ 
    while true        
    do 
    sleep 1 
    done 
} & 

我可以看到該進程已經開始,但是在製作'killall dummy_script.sh'之前網頁不會返回。如果我在終端中手動運行腳本,它會立即返回併產生循環。

有沒有人知道在這裏我可以產生的任務,而不會讓網頁等待它?

希望你們能幫助我,這將是最感激。

回答

0

要回答你的問題:

  1. 你可以開始尋找pcntl_fork。或者你可以檢查this。基本上,你正在使用本地fork來分離長時間運行的進程,所以你的php前端不必等待。
  2. 如果你覺得冒險,你可以把你的「工作」(你對這個長時間運行的過程的請求)放在一個數據庫中。然後cron作業檢查數據庫是否有傳入請求,並且是執行該過程的那個。
  3. 另一種方法是使用resque,但不要在這一點上打擾。
+0

感謝您的快速回復。這是一個可能的解決方案,現在可以解決。但是,我並不打算在等待過程完成時收集任何資源。沒有等待它完成的發送命令的選項? ('消防和忘記'選項) – 2015-02-06 13:52:45