Saya mendapatkan kesalahan memori dalam pekerjaan 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
Bagian crontab yang berlaku adalah:
$ sudo crontab -u www-data -l
MAILTO=root
# m h dom mon dow command
*/15 * * * * php /opt/matrix/core/cron/run.php /opt/matrix
Saya menjalankan Debian Squeeze, sepenuhnya diperbarui.
Solusi yang jelas adalah bahwa cli memiliki batas memori rendah (64MB). Namun, /etc/php5/cli/php.ini mengatakan ini tidak terbatas.
$ cat /etc/php5/cli/php.ini | grep memory_limit
memory_limit = -1
Saya membaca di suatu tempat bahwa itu bisa berbeda untuk pengguna yang berbeda, dan karena prosesnya berjalan sebagai www-data, saya berlari:
$ sudo -u www-data -s
$ php -i | grep memory_limit
memory_limit => -1 => -1
suhosin.memory_limit => 0 => 0
Bahkan apache / php.ini memiliki batas lebih tinggi dari yang diklaim oleh kesalahan:
$ sudo cat /etc/php5/apache2/php.ini | grep memory_limit
memory_limit = 128M
Apa yang saya lewatkan? Di mana batas memori ini?
Saat menguji versi php CLI
5.5.9
, tampaknya di cli ia memiliki batas memori yang tidak ditentukan secara default, dan menetapkanphp -d memory_limit=4G my_script.php
akan menetapkan batasan untuk itu.sumber
Jika Anda menginstal PHP sebagai modul Apache (centang 'Server API' di
phpinfo()
), Anda harus memanggilnya melalui peramban web baris perintah (wget, curl, lynx, ...) dalam pekerjaan cron, sesuatu seperti ini:sumber