Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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,我正在为一个电子商务网站写脚本。它将允许客户订阅多个类别中的一个类别的更改。或任何类别的组合,因此发送给单个客户的电子邮件可能是该客户独有的。它将由cron每周运行一次 这是一个繁忙的网站,可能最终会有成千上万的订阅,每个订阅都需要处理,然后发送电子邮件。所以,问题是什么是最好的方法 在单个文件中,该过程将不可避免地超时 我可以运行单个cron作业,直到订阅列表完成?或者将文件重定向到自身,直到列表完成 有没有一个标准的方法可以做到这一点?任何建议都将被感激地接受 如果这是重复的,我道歉。我已经

我正在为一个电子商务网站写脚本。它将允许客户订阅多个类别中的一个类别的更改。或任何类别的组合,因此发送给单个客户的电子邮件可能是该客户独有的。它将由cron每周运行一次

这是一个繁忙的网站,可能最终会有成千上万的订阅,每个订阅都需要处理,然后发送电子邮件。所以,问题是什么是最好的方法

在单个文件中,该过程将不可避免地超时

我可以运行单个cron作业,直到订阅列表完成?或者将文件重定向到自身,直到列表完成

有没有一个标准的方法可以做到这一点?任何建议都将被感激地接受


如果这是重复的,我道歉。我已经搜索过了,但要找到正确的搜索词很困难。

分批执行更新

简明的 在表中添加一个标志 抓取标志仍处于默认值的记录 更新客户信息 更新标志 重复 解释 我们需要在表中创建一个标志

ALTER TABLE `foo`
ADD COLUMN `is_updated` tinyint(1) NOT NULL DEFAULT 0; //0 = not updated. 1 = updated
因此,在cron调用的文件中,我们可以执行以下操作来获取接下来1000个未处理的行

SELECT * FROM `foo` WHERE `is_updated` = 0 ORDER BY `id` ASC LIMIT 1000
然后,我们可以使用这1000个条目执行实际逻辑,并最终更新它们

UPDATE `foo` SET `is_updated` = 1 ORDER BY `id` ASC LIMIT 1000
笔记 根据您正在执行的处理量,我绝对建议您在非高峰时间执行此操作,或者将其发送到专门用于此任务的从属服务器。 创建一个队列表可能是值得的,该表插入了在特定类别更新后需要更新的客户,并从该表中获取客户电子邮件,但仍然使用标志思想进行批量更新。 阅读一下关于一次发送大量电子邮件的提示。 阅读有关多线程客户更新过程的答案。
从CRON调用的PHP脚本不会超时…我认为只有webrequests超时。以随机数1000成批执行所有操作。一次更新1000个客户,然后转到下一批客户。当然,在非高峰时间这样做。如果你只是担心超时:你可以使用它,但是在cronjob中你会遇到另一个问题。迟早会有多个具有相同任务的cronjob同时运行,从而导致不必要的服务器负载。@Oli-这是不正确的。任何PHP脚本都具有超时功能。您可以通过一些设置和选项来防止出现这种情况。我站着更正:谢谢。是的,我理解批处理的概念。由于这个原因,这些表已经被标记。而且,是的,显然高峰时间不是最佳跑步时间。多线程上的线程是我一直在寻找的。再次感谢。