【问题标题】:Chaining cron scripts to get around 30-second runtime limit链接 cron 脚本以获得大约 30 秒的运行时间限制
【发布时间】:2012-06-07 05:52:27
【问题描述】:

我有一个不常见的自定义站点地图生成器 cron 脚本,我需要在当前位于 HostGator 共享服务器上的站点上运行。生成器脚本是用 PHP 编写的,并使用以下 cron 命令执行:

php public_html/mysite.com/core/update.php > update.log

生成过程涉及调用内部 API 并根据结果进行距离计算,因此脚本通常需要 5-10 分钟才能运行。对于 HostGator 的共享服务器,硬编码的 PHP 运行时限制为 30 秒。

有什么方法可以让我的脚本分解成更小的进程?有谁知道将其转码成 Perl 或 Python 是否会超过 30 秒的限制?

【问题讨论】:

  • 打破你的热门条款和条件绝不是一个好主意,如果你需要这样的资源,看起来是时候使用你自己的服务器了。
  • @MarathonStudios - HostGator 不允许更改 max_execution_time。如果您需要一些帮助来尝试弄清楚如何将脚本分解为更小的脚本(或者优化它),您介意发布脚本吗?
  • @Francois set_time_limit() 怎么样?
  • 有没有办法将项目标记为完成,所以如果脚本死了,你可以重新启动它,让它从你离开的地方继续?也许选择了今天之前最后更新的所有项目或类似的东西?
  • 0xAli - 我早些时候将其作为答案发布,并在我意识到 HostGator 明确声明您无法更改时间限制后将其删除。该“可能”有效,但即使有效,也将违反使用条款。

标签: php cron hosting


【解决方案1】:

放这个

set_time_limit(30);

在您的代码花费大部分时间的函数或循环中应该可以解决问题。

【讨论】:

    【解决方案2】:

    你可以尝试分叉。您需要确保每个分叉都可以执行其工作并在 30 秒内创建一个新分叉。由于 fork 是正在运行的进程的副本,因此您保留了迄今为止提取的所有数据。

    或者,使用 multi-curl 一次向您的服务器发送多个请求,并在 30 秒内完成整个过程。当然,您需要适当地分配工作。

    【讨论】:

    • 我可以使用 PHP 或 Python 编写分叉程序吗?如果有,怎么做?
    • 在 php 中使用 pctl 函数。当然,我希望您的主机启用 pctl 功能。 php.net/manual/en/function.pcntl-fork.php
    猜你喜欢
    • 2012-03-26
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多