php limite de memória cli

21

Estou recebendo um erro de memória em uma tarefa do cron 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

As partes aplicáveis do crontab são:

$ sudo crontab -u www-data -l
MAILTO=root
# m h  dom mon dow   command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix

Eu estou rodando no Debian Squeeze, totalmente atualizado.

A solução óbvia seria que o cli tem um limite de memória baixo (de 64MB). No entanto, o /etc/php5/cli/php.ini diz que é ilimitado.

$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1

Eu li em algum lugar que poderia ser diferente para usuários diferentes e, como o processo está sendo executado como www-data, eu corri:

$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0

Até mesmo o apache / php.ini tem um limite maior do que o erro está afirmando:

$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M

O que estou perdendo? Onde está esse limite de memória?

    
por Ryan H 29.07.2011 / 19:15

2 respostas

44

IIRC, um memory_limit ilimitado não é suportado pela CLI (tentarei encontrar uma fonte para isso), mas por enquanto, tente passá-lo para o comando:

php -d memory_limit=128M my_script.php

UPDATE

Aparentemente eu estava sonhando com o memory_limit ilimitado não sendo suportado pelo php cli. Independentemente disso, parece que o valor do ini é ignorado. A solução mais simples deve ser configurá-lo especificamente no comando php que chama o script.

UPDATE2

Para responder à pergunta de onde vem o limite de memória, é mais provável que esteja sendo definido no próprio script usando 'ini_set'.

    
por 29.07.2011 / 19:27
-3

Se você instalar o PHP como um módulo do Apache (verifique 'API do servidor' em phpinfo() ), você deve chamá-lo via navegador de linha de comando (wget, curl, lynx, ...) no cron job, algo como isto :

*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1
    
por 29.07.2011 / 19:26