作为cronjob运行PHP文件几个小时的好主意?

时间:2013-10-17 20:00:35

标签: php cron

我想每晚运行一个PHP脚本作为cronjob。 PHP脚本将导入包含大约145,000个产品的XML文件。每个产品都包含一个图像链接,该图像将下载并保存在服务器上。我可以想象这可能会导致一些过载。所以我的问题是:拆分PHP文件是一个更好的主意吗?如果是这样,什么是更好的解决方案?更多的cronjobs,彼此间隔几分钟?使用exec运行另一个PHP文件(猜测不是,因为我无法想象这会产生很大的影响),或者其他什么......?或者只使用一个脚本一次导入所有产品?

提前致谢。

2 个答案:

答案 0 :(得分:1)

在很大程度上取决于你是如何编写的,无论是否泄漏打开的文件或数据库连接。它还取决于您使用的是哪个版本的php。在php 5.3中,有很多工作要解决垃圾收集问题:

http://www.php.net/manual/en/features.gc.performance-considerations.php

如果操作是事务性的并不重要,例如全部或全部(例如,如果它中途失败)那么我很想在块中处理这个,其中每次运行脚本处理下一个x项,其中x可以是一个变量,具体取决于它需要多长时间。所以你需要做的就是继续重复脚本,直到什么都没做。

为此,我建议使用名为Fat Controller的工具:

http://fat-controller.sourceforge.net

它可以继续重复脚本,然后一切都完成后停止。您可以告诉Fat Controller还有更多工作要做,或者使用php脚本中的退出状态完成所有操作。 Fat Controller网站上有一些用例,例如:http://fat-controller.sourceforge.net/use-cases.html#generating-newsletters

您还可以使用Fat Controller并行运行进程以加快速度,请注意不要并行运行太多并减慢速度。如果您正在写入数据库,那么最终您将受到硬盘的限制,除非您有一些奇特的东西,否则意味着您的最佳并发性将为1。

最后一个问题是如何触发这一点 - 你可能最好从CRON触发Fat Controller。

Fat Controller网站上有大量的文档和示例,但如果您需要任何具体指导,我很乐意为您提供帮助。

答案 1 :(得分:1)

要完成上一个答案,最佳解决方案是优化脚本:

  • 首选JSON到XML,解析JSON的速度更快(非常)。
  • 使用一个或几个并发连接到数据库。
  • 一次更改多行(在一个查询中插入10-30行,选择100行,删除多个,不要多,不要使内存过载,不要少,以使您的交易有利可图)。
  • 尽量减少查询次数。 (以下点)
  • 明确地跳过最新的行,使用日期(时间戳,日期时间)。
  • 你也可以通过usleep(30)电话让proc低语。
  • 要使用多个PHP流程,请使用popen()