2009-10-20 119 views
0

我想通過打開一個url來調用服務器上的腳本。該腳本需要很長時間才能執行,所以我想在後臺運行它,因此不需要保持瀏覽器處於打開狀態,並且不必擔心超時。通過php system()命令在後臺運行多個系統命令?

它看起來像PHP函數system()應該工作,但它不適合我。

腳本必須從正確的目錄內執行,以便所有相對路徑都正確。下面是系統命令,我想執行:

cd /path/to/script/directory/;php my_php_script & 

這是我一直在努力,都無濟於事最新的東西。

system('(cd /path/to/script/directory/;php my_php_script & > /dev/null)'); 

任何人都知道如何做到這一點?

+0

噢,如果我能夠以低優先級運行這個進程,這將會很酷 - 很好嗎? – user77413 2009-10-20 05:35:20

回答

2

在像Linux這樣的系統的Unix上,這很容易做到。 Nohup是您需要開始的命令,並且以下命令將繼續運行。如果腳本退出或用戶退出,命令甚至會運行。這與您的命令非常相似,但它更易於閱讀。

system("nohup php /path/to/script/directory/my_php_script > /dev/null &"); 

PHP的垃圾回收器很容易泄漏內存,一個簡單的腳本可能會在一天內消耗千兆字節的內存。最好將php腳本安排爲在幾小時或幾分鐘內退出的cron作業,以便釋放內存。

+0

這不適合我。 首先,我有一些相對路徑包含在腳本內部,因爲腳本是從錯誤的目錄執行的,所以不起作用。這就是爲什麼我在我的版本中有「cd」聲明。 其次,當我在命令行中運行該命令時,我得到如下: 的nohup:忽略輸入和標準錯誤重定向到標準輸出 還有,爲什麼我需要的nohup條命令?看起來這只是在用戶註銷後保持後臺進程運行。這是否需要,因爲Apache用戶不會註銷? – user77413 2009-10-20 17:26:30