我喜歡每週運行一次運行php腳本的cron作業。Cron作業限制
該腳本需要從數據庫中獲取所有用戶,並運行另一個腳本,向每個用戶發送一封包含從外部API獲取的數據的報告。
問題是,每個cron作業都有100mb的內存限制。如果我的數據庫中有成千上萬的用戶,並且我需要從外部API檢索大量數據,我很快就會超出內存限制。
有辦法通過分解PHP腳本來解決這個問題嗎?你的戰略是什麼?
我喜歡每週運行一次運行php腳本的cron作業。Cron作業限制
該腳本需要從數據庫中獲取所有用戶,並運行另一個腳本,向每個用戶發送一封包含從外部API獲取的數據的報告。
問題是,每個cron作業都有100mb的內存限制。如果我的數據庫中有成千上萬的用戶,並且我需要從外部API檢索大量數據,我很快就會超出內存限制。
有辦法通過分解PHP腳本來解決這個問題嗎?你的戰略是什麼?
如果你想分手的腳本,你可以離開了每週的cron但不是發送郵件,你可以排隊到數據庫中的表。然後,使用每5或10分鐘運行一次的第二臺cron,您可以讀取數據庫郵件隊列(搜索最多50或100行),如果發現某些內容,則會發送大量電子郵件...
In一般來說,這種策略(龐大的隊列加載,更小的隊列處理)使您能夠拆分大型進程的執行。
你可以使用ini_set
來碰撞memory_limit
和max_execution_time
(儘管通常是無限的)。
例如:
ini_set('memory_limit', '1G');
ini_set('max_execution_time', 0); // <-- infinite
您是否通過cli或通過php頁面運行cron作業? 嘗試通過CLI與
php -d memory_limit=256M yourscript.php
運行它,或將內存限制在php.ini
我假設你的crond不會強迫內存限制只是爲了好玩,所以你不應該通過發佈子流程來解決它。你有命令行訪問機器嗎?然後,你可以寫一個小腳本,除了執行這個工作,睡一週,做這個工作,睡一個星期......這不應該浪費太多的資源 – 2011-12-23 12:34:32
我想你的'php'代碼有一些問題:它發送郵件時不得消耗100MB – k102 2011-12-23 12:35:26