Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Cron作业限制_Php_Cron - Fatal编程技术网

Php Cron作业限制

Php Cron作业限制,php,cron,Php,Cron,我想每周运行一次运行php脚本的cron作业 该脚本需要从数据库获取所有用户,并运行另一个脚本,该脚本向每个用户发送一封电子邮件,其中包含从外部API提取的数据报告 问题是,每个cron作业都有100mb的内存限制。如果我的数据库中有成千上万的用户,并且我需要从外部API检索大量数据,我很快就会超过内存限制 有没有办法通过分解php脚本来解决这个问题?您的策略是什么?您可以使用它来降低内存限制和最大执行时间(不过通常在命令中是无限的) 例如: ini_set('memory_limit', '1

我想每周运行一次运行php脚本的cron作业

该脚本需要从数据库获取所有用户,并运行另一个脚本,该脚本向每个用户发送一封电子邮件,其中包含从外部API提取的数据报告

问题是,每个cron作业都有100mb的内存限制。如果我的数据库中有成千上万的用户,并且我需要从外部API检索大量数据,我很快就会超过内存限制

有没有办法通过分解php脚本来解决这个问题?您的策略是什么?

您可以使用它来降低
内存限制
最大执行时间
(不过通常在命令中是无限的)

例如:

ini_set('memory_limit', '1G');
ini_set('max_execution_time', 0); // <-- infinite
ini_集('memory_limit','1G');

ini_集('max_execution_time',0);// 如果要分解脚本,可以保留每周cron,但不发送邮件,可以将其排入数据库表。然后,使用每5或10分钟运行一次的第二个cron,您可以读取数据库邮件队列(搜索最多50或100行),如果您找到了什么,您将发送一大块电子邮件


一般来说,这种策略(大量队列加载,较小的队列分块处理)允许您分割大型进程的执行。

您是通过cli还是通过php页面运行cron作业? 尝试通过cli和

php -d memory_limit=256M yourscript.php 
或者在php.ini中设置内存限制


检查此项了解更多信息

我假设您的crond不会仅仅为了好玩而强制执行此内存限制,因此您不应该通过发出子进程来绕过它。您是否具有对机器的命令行访问权限?然后你可以写一个小脚本,除了执行任务,睡一个星期,完成任务,睡一个星期。。。这不应该浪费太多资源。我想您的
php
代码中有一些问题:发送邮件不能消耗100MB