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
# m h dom mon dow command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix
데비안 스퀴즈에서 실행 중이며 완전히 업데이트되었습니다.
명백한 해결책은 cli의 메모리 제한이 64MB라는 것입니다. 그러나 /etc/php5/cli/php.ini는 무제한이라고 말합니다.
$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1
어딘가에서 사용자마다 다를 수 있다는 것을 읽었으며 프로세스가 www-data로 실행 중이므로 다음을 실행했습니다.
$ 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
내가 무엇을 놓치고 있습니까? 이 메모리 제한은 어디에 있습니까?
답변
무제한 memory_limit 인 IIRC는 CLI에서 지원하지 않습니다 (소스를 찾으려고합니다). 지금은 명령에 전달해보십시오.
php -d memory_limit=128M my_script.php
최신 정보
분명히 나는 php cli에서 지원되지 않는 무제한 memory_limit를 꿈꾸고있었습니다. 어쨌든 ini의 값이 무시 된 것처럼 보입니다. 그런 다음 가장 간단한 해결책은 스크립트를 호출하는 php 명령에서 구체적으로 설정하는 것입니다.
업데이트 2
메모리 제한의 출처에 대한 질문에 답하기 위해 ‘ini_set’을 사용하여 스크립트 자체에서 설정되었을 가능성이 큽니다.
답변
CLI PHP 버전을 테스트하는 동안 5.5.9
cli에서는 기본적으로 메모리 제한이 제한되지 않은 것으로 나타나며이를 지정 php -d memory_limit=4G my_script.php
하면 제한이 설정됩니다.
답변
PHP를 Apache 모듈로 설치하는 경우 (에서 ‘서버 API’확인 phpinfo()
) cron 작업에서 명령 줄 웹 브라우저 (wget, curl, lynx 등)를 통해 다음과 같이 호출해야합니다.
*/15 * * * * lynx -dump http://localhost/script.php >> /var/log/script.log 2>&1