【问题标题】:Cron job limitationsCron 作业限制
【发布时间】:2011-12-23 12:29:58
【问题描述】:

我喜欢每周运行一次运行 php 脚本的 cron 作业。

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

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

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

【问题讨论】:

  • 我假设你的 crond 不会仅仅为了好玩而强制这个内存限制,所以你不应该通过发出子进程来绕过它。您对机器有命令行访问权限吗?然后,您可以编写一个小脚本,只执行作业,睡一周,做作业,睡一周......这不应该浪费太多资源
  • 我猜你的php代码有问题:发送邮件不能消耗100MB

标签: php cron


【解决方案1】:

如果您想分解脚本,您可以保留每周的 cron,但您可以将其排入数据库表中,而不是发送邮件。然后,使用每 5 或 10 分钟运行一次的第二个 cron,您可以读取数据库邮件队列(搜索最多 50 或 100 行),如果您发现了什么,您会发送大量电子邮件...

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

【讨论】:

    【解决方案2】:

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

    通过 cli 运行它
    php -d memory_limit=256M yourscript.php 
    

    或者在你的 php.ini 中设置内存限制

    查看更多http://blog.urbaninsight.com/comment/1544

    【讨论】:

      【解决方案3】:

      您可以使用ini_set 来碰撞memory_limitmax_execution_time(尽管通常是无限的命令)。

      示例:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-25
        • 1970-01-01
        • 2011-09-14
        • 2014-06-21
        • 2020-04-30
        • 2020-03-09
        • 2014-08-18
        • 2016-02-17
        相关资源
        最近更新 更多