【问题标题】:Cron command run php script every 60 seconds and then overload everythingCron 命令每 60 秒运行一次 php 脚本,然后重载所有内容
【发布时间】:2017-03-10 11:45:00
【问题描述】:

我在 cron 中有任务:每 3 小时运行一次 php 脚本。

我也尝试过使用 WGET 和 PHP,但遇到了同样的问题。有时脚本的工作时间超过 2 分钟,但大部分时间 30 秒就足够了。如果执行时间超过 60 秒,它将被丢弃(504 getway)并 cron 再次运行此脚本。然后一次又一次。几个小时后致命的超载。

我尝试了很多不同的语法,但都失败了:

如何仅通过 1 次尝试运行我的脚本来管理命令?我不需要它每 60 秒运行一百万次。有什么限制吗?

也许我可以将执行时间限制/降低到 20 秒,以防止任何不适当的脚本运行。我只需要运行脚本,我不需要系统等待任何时间,脚本以任何方式完成任务。

【问题讨论】:

  • 致命过载在哪里?运行作业的系统,还是作业正在命中的系统?
  • 发布 cron 作业的 crontab 条目,可能是您的时间间隔有问题。您是否直接在控制台中尝试过该命令?这种情况下的执行时间是多久?

标签: php time cron limit execution


【解决方案1】:

你可以直接在php脚本中用set_time_limit ( int $seconds );设置最大执行时间 查看更多here

【讨论】:

    【解决方案2】:

    首先,wget 的建议很糟糕。如果您打算将 PHP 脚本用于 cron 任务,最好将其作为命令行脚本运行,这样可以直接运行它,而通过网络服务器运行。

    假设您不依赖服务器信息或脚本中的 GET/POST 变量:您是否尝试过手动运行一次?这样做有什么奇怪的事情发生吗?

    像下面这样一个简单的 crontab 条目将仅每三个小时运行一次您的脚本:

    * */3 * * * php /path/to/script.php
    

    【讨论】:

    • 我现在通过 SSH 手动或直接通过浏览器提供它。即使需要超过 60 秒,它也能正常工作。问题只有当 cron 遇到超时,它再次运行脚本,但前一次运行仍在进程中,60 秒后再次运行。那么,最大执行时间 set_time_limit ( int $seconds ) 就够了吗?
    • 如果你每三个小时运行一次脚本,我无法想象你的脚本运行会重叠......但是,你可以在脚本的开头使用set_time_limit(60)以确保它不会运行超过 60 秒。
    • set_time_limit(120) 工作正常。 120 秒足以完成脚本。谢谢你们!
    【解决方案3】:

    如果你想保证避免两个脚本同时运行,你应该使用某种锁定,例如最简单的文件锁定flock

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 2014-09-25
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2012-03-26
      相关资源
      最近更新 更多