Recibo un error de memoria en un trabajo cron de php:
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
Las partes aplicables del crontab son:
$ sudo crontab -u www-data -l
MAILTO=root
# m h dom mon dow command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix
Estoy ejecutando Debian Squeeze, totalmente actualizado.
La solución obvia sería que el cli tiene un límite de memoria bajo (de 64 MB). Sin embargo, /etc/php5/cli/php.ini dice que es ilimitado.
$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1
Leí en alguna parte que podría ser diferente para diferentes usuarios, y dado que el proceso se ejecuta como www-data, ejecuté:
$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0
Incluso el apache / php.ini tiene un límite más alto que el que afirma el error:
$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M
¿Qué me estoy perdiendo? ¿Dónde está este límite de memoria?
Al probar una versión CLI php
5.5.9
, parece que en cli tiene un límite de memoria ilimitado por defecto, y la especificaciónphp -d memory_limit=4G my_script.php
establecerá una limitación a eso.fuente
Si instala PHP como un módulo Apache (marque 'Servidor API' en
phpinfo()
), debe llamarlo a través del navegador web de línea de comandos (wget, curl, lynx, ...) en el trabajo cron, algo como esto:fuente