首页 文章

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

提问于
浏览
1

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

提前致谢 .

2 回答

  • 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

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

    • 首选JSON到XML,解析JSON更快(非常) .

    • 使用一个或几个并发连接到数据库 .

    • 一次更改多行(在一个查询中插入10-30行,选择100行,删除多个,而不是更多不要使内存过载而不是更少以使您的事务有利可图) .

    • 最大限度地减少查询次数 . (按照上一点)

    • 最后跳过最新的行,使用日期(时间戳,日期时间) .

    • 你也可以通过usleep(30)电话让proc低语 .

    • 要使用多个PHP进程,请使用popen() .

相关问题