Otrzymuję błąd pamięci w zadaniu php cron:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 71 bytes) in /opt/matrix/core/lib/DAL/DAL.inc on line 830
Odpowiednie części crontab to:
$ sudo crontab -u www-data -l
MAILTO=root
# m h dom mon dow command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix
Korzystam z Debian Squeeze, w pełni zaktualizowany.
Oczywistym rozwiązaniem byłoby, że cli ma niski limit pamięci (64 MB). Jednak /etc/php5/cli/php.ini mówi, że jest nieograniczony.
$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1
Czytałem gdzieś, że może być różnie dla różnych użytkowników, a ponieważ proces działa jako dane www, uruchomiłem:
$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0
Nawet apache / php.ini ma wyższy limit niż twierdzi błąd:
$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M
czego mi brakuje? Gdzie jest ten limit pamięci?
Podczas testowania wersji
5.5.9
phi CLI wydaje się, że w cli ma domyślnie nielimitowany limit pamięci, a określenie gophp -d memory_limit=4G my_script.php
spowoduje ograniczenie tego.źródło
Jeśli zainstalujesz PHP jako moduł Apache (zaznacz „API Server” w
phpinfo()
), powinieneś wywołać go za pomocą przeglądarki internetowej wiersza poleceń (wget, curl, lynx, ...) w zadaniu cron, coś takiego:źródło