我在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
crontab的适用部分是:
$ sudo crontab -u www-data -l MAILTO=root # mh dom mon dow command */15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix
我在Debian Squeeze上运行,完全更新。
显而易见的解决scheme是cli具有低内存限制(64MB)。 但是,/etc/php5/cli/php.ini说这是无限的。
$ cat /etc/php5/cli/php.ini | grep memory_limit memory_limit = -1
我在某个地方看到,它可能是不同的用户,因为该过程是作为万维网数据运行,我跑:
$ sudo -u www-data -s $ php -i | grep memory_limit memory_limit => -1 => -1 suhosin.memory_limit => 0 => 0
即使是apache / php.ini也有比错误声称更高的限制:
$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit memory_limit = 128M
我错过了什么? 这个内存限制在哪里?
IIRC,CLI不支持无限的memory_limit(我会试着find这个源代码),但现在,尝试将它传递给命令:
php -d memory_limit=128M my_script.php
UPDATE
显然我是梦想着无限的memory_limit不支持的PHP CLI。 无论如何,它看起来像ini的价值被忽略。 最简单的解决scheme应该是在调用脚本的php命令中专门设置它。
UPDATE2
要回答内存限制来自哪里的问题,最有可能在脚本本身使用“ini_set”来设置。
如果您将PHP安装为Apache模块(在phpinfo()
检查“服务器API”),您应该通过命令行Web浏览器(wget,curl,lynx等)在cron作业中调用它,如下所示:
*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1