2012-03-22 177 views
2

我有一個PHP腳本,我需要每5秒運行(運行,等待,直到它完成,等待5秒鐘,然後再次運行)PHP睡眠VS慶典睡眠

我做這件事的兩個方面。要麼必須在腳本有休眠功能的infinte循環,看起來就像是:

while (1) 
{ 
    do_stuff(); 
    sleep 5; 
} 

或有bash腳本,將運行腳本並等待5秒鐘。它看起來像

while [ 1 ]; do 
    php script.php & 
    wait 
    sleep 5 
done 

我想知道什麼是最有效的方式來做到這一點。

PHP腳本我運行是一個笨控制器,做了很多的數據庫調用..

回答

8

如果你做了很多的DB調用,然後做PHP中的睡眠。這樣你就不會支付PHP的啓動罰款,連接到數據庫的處罰等等,如果你在bash中睡覺,就會發生這種情況。

當你做bash循環時,你會在每次迭代時啓動/運行/退出你的腳本,並且這個開銷會在長時間運行的腳本上快速累積。另一方面,至少你每次都會從一個「乾淨」的環境開始,而不必擔心腳本中的內存泄漏。您可能希望將兩者結合起來,以便在PHP(例如)中循環/睡眠100次,然後退出並在Bash中循環。

1

通常,所有的PHP腳本都有超時 - 除非你是從CLI運行 - 所以你的第一個方法將工作30到60秒(取決於你的服務器配置),然後將被強行終止。

我傾向於建議一個命令行選項,或者甚至(這取決於您希望代碼運行的頻率)cron命令來執行它。

+0

它當然會從命令行運行。超時並不是問題 – applechief 2012-03-22 16:46:56

1

這可能取決於系統正在做什麼。我認爲系統可以更好地處理BASH解決方案,以釋放其他應用程序的資源。

數據庫調用的次數似乎不那麼重要,因爲您需要做出這些調整。從BASH運行腳本的成本是構建和剝離CodeIgniter框架的時間。但CodeIgniter已經被設計爲在一個普通的Web應用程序中執行此操作,並且執行速度足夠快。