2011-12-23 212 views
2

我喜歡每週運行一次運行php腳本的cron作業。Cron作業限制

該腳本需要從數據庫中獲取所有用戶,並運行另一個腳本,向每個用戶發送一封包含從外部API獲取的數據的報告。

問題是,每個cron作業都有100mb的內存限制。如果我的數據庫中有成千上萬的用戶,並且我需要從外部API檢索大量數據,我很快就會超出內存限制。

有辦法通過分解PHP腳本來解決這個問題嗎?你的戰略是什麼?

+0

我假設你的crond不會強迫內存限制只是爲了好玩,所以你不應該通過發佈子流程來解決它。你有命令行訪問機器嗎?然後,你可以寫一個小腳本,除了執行這個工作,睡一週,做這個工作,睡一個星期......這不應該浪費太多的資源 – 2011-12-23 12:34:32

+0

我想你的'php'代碼有一些問題:它發送郵件時不得消耗100MB – k102 2011-12-23 12:35:26

回答

4

如果你想分手的腳本,你可以離開了每週的cron但不是發送郵件,你可以排隊到數據庫中的表。然後,使用每5或10分鐘運行一次的第二臺cron,您可以讀取數據庫郵件隊列(搜索最多50或100行),如果發現某些內容,則會發送大量電子郵件...

In一般來說,這種策略(龐大的隊列加載,更小的隊列處理)使您能夠拆分大型進程的執行。

1

你可以使用ini_set來碰撞memory_limitmax_execution_time(儘管通常是無限的)。

例如:

ini_set('memory_limit', '1G'); 
ini_set('max_execution_time', 0); // <-- infinite