2011-12-23 4 views
2

Id нравится запускать задание cron раз в неделю, которое запускает скрипт php.Ограничения заданий Cron

Сценарий должен будет получить всех пользователей из базы данных и запустить другой скрипт, который отправляет каждому пользователю сообщение с отчетом с данными, извлеченными из внешнего API.

Проблема в том, что на каждом задании cron существует ограничение на 100 мб памяти. Если в моем db тысячи пользователей, и мне нужно получить много данных из внешнего API, я скоро превышу пределы памяти.

Есть ли способ обойти это, разбив скрипты php? Какова была бы ваша стратегия?

+0

Я полагаю, ваш crond не будет форсировать этот предел памяти просто для удовольствия, поэтому вы не сможете обойти его, выпуская подпроцессы. У вас есть доступ к командной строке? Затем вы можете написать небольшой скрипт, который ничего не делает, кроме выполнения задания, спать в неделю, выполнять работу, спать в неделю ... Это не должно тратить слишком много ресурсов. –

+0

Я предполагаю, что в вашем коде 'php' есть некоторые проблемы: это не должен потреблять 100 МБ для отправки писем – k102

ответ

4

Если вы хотите, чтобы разбить сценарий, вы можете оставить еженедельные хроны, но вместо отправки письма вы можете поставить его в очередь в таблицу базы данных. Затем, используя второй cron, который запускается каждые 5 или 10 минут, вы можете прочитать почтовую почтовую базу (поиск не более 50 или 100 строк), и если вы что-то найдете, вы отправите кусок писем ...

В В общем, эта стратегия (огромная загрузка очереди, обработка небольших очередей в кусках) позволяет разделить выполнение больших процессов.

1

Вы можете использовать ini_set, чтобы наброситься на memory_limit и max_execution_time (обычно в бесконечной команде).

пример:

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

Вы запускаете задание cron через cli или через php-страницу? Попробуйте запустить его с помощью кли с

php -d memory_limit=256M yourscript.php 

или установить ограничение памяти в php.ini

проверить это для более http://blog.urbaninsight.com/comment/1544

Смежные вопросы