【问题标题】:Workaround for cron time limitationscron 时间限制的解决方法
【发布时间】:2011-02-06 03:50:43
【问题描述】:

所以基本上我正在使用一个 cron 作业来执行一个需要相当长的时间才能运行的 php 脚本(从 ftp 拉下更新的 xml、解压缩、mysql 操作、api 访问等)。问题是我们在一台服务器上运行,该服务器将 cron 作业的运行时间限制为 15 分钟。

我的问题是:可以使用哪些方法来解决此限制?将脚本分解成片段仍然会导致片段运行超过 15 分钟的时间限制,所以这就结束了。执行一定时间后,有什么方法可以重定向到另一个 php 脚本?或者是否可以在达到 15 分钟的时间限制之前以某种方式使用 bash 脚本重新启动脚本?

谢谢!

【问题讨论】:

  • 你可能会破坏你的主机条款,试图规避他们设置的任何限制,我会考虑获得一个专用的盒子,或者移动主机。
  • 是的,获得一个虚拟服务器,然后您可以每分钟运行一次 cron。我开始与 gearman 合作:gearman.org。它可能有助于处理您的工作。
  • 如果不通过 cron,最好的方法是什么?
  • 是cron有15分钟的时间限制,还是你运行的任何进程都有15分钟的时间限制?此外,请务必在此处投票和/或接受您认为有帮助的答案。谢谢。

标签: php linux cron


【解决方案1】:

我的第一个建议是找一个新的主机,但听起来你现在不是一个选择。

您可以在达到 15 分钟的时间限制之前跟踪您的运行时间并将状态保存到数据库或平面文件中。 cron 中的下一个循环将查看数据库或文件,并知道从哪里继续您离开的地方。

这当然取决于您的脚本在做什么。如果您只是对 X 条记录执行相同的任务,听起来您可能能够实现这样的事情。

【讨论】:

    【解决方案2】:

    有点取决于他们如何实施限制。您也许可以使用exec() 并在某个时候启动另一个脚本来中断该过程。

    您不能真正“重新启动”脚本。如果可以的话,无论如何,它只是从头开始。

    我不明白你为什么不能分手?每天从 cron 启动的脚本可以使用 15 分钟,还是什么?听起来您需要一个不同的主机提供商,这个限制似乎很蹩脚。还有 15 分钟,你要处理什么样的大文件。也许你应该努力让它在 15 分钟内运行。

    编辑

    我在想,既然限制听起来只是在从 cron 运行的脚本上,为什么你不在另一个系统上拥有实际的 cron,而只需使用 wget 调用远程服务器上的脚本。

    【讨论】:

    • 服务器在 rackspace 云主机上,我同意这个限制是荒谬的!但是,我目前无法移动托管。该脚本执行的 API 调用需要相当长的时间,尤其是在 50,000 条记录上执行。是否可以在 php 脚本中发送带有 $_GET 变量的标头以提供位置标记?
    • 是的,你可以在完成一定数量的脚本后调用第 2 步,但我看不出这对你有什么帮助,这与你的情况没有什么不同已将其分解并作为不同的工作开始运行...我正在编辑我的答案以提供可能的另一种解决方案。
    【解决方案3】:

    您可以尝试让 cron 作业在脚本后台运行。类似的东西

     0 0 * * * php /path/to/file.php &
    

    我从未尝试过这种策略,因为我从来没有运行过这么长时间的 cron 作业,但它会解除脚本与 cron 的关联

    【讨论】:

      猜你喜欢
      • 2016-01-30
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2016-08-31
      • 1970-01-01
      • 2018-06-25
      • 2019-06-02
      相关资源
      最近更新 更多