【问题标题】:php sleep vs bash sleepphp 睡眠与 bash 睡眠
【发布时间】:2012-04-07 06:18:12
【问题描述】:

我有一个 php 脚本,我需要每 5 秒运行一次(运行,等到它完成,等待 5 秒,再次运行)

我有两种方法。要么在脚本中有一个无限循环,并带有一个如下所示的睡眠函数:

while (1)
{
   do_stuff();
   sleep 5;
}

或者使用 bash 脚本来运行脚本并等待 5 秒。应该是这样的

while [ 1 ]; do
    php script.php &
    wait
    sleep 5
done

我想知道最有效的方法是什么。

我正在运行的 php 脚本是一个执行大量数据库调用的 codeigniter 控制器..

【问题讨论】:

    标签: php bash codeigniter sleep


    【解决方案1】:

    这可能取决于系统还在做什么。我认为系统可以更好地处理 BASH 解决方案,以便为其他应用程序释放资源。

    数据库调用的数量似乎不太重要,因为您需要以任何一种方式进行。从 BASH 运行脚本的成本是构建和剥离 CodeIgniter 框架的时间。但是 CodeIgniter 已经设计为在普通的 Web 应用程序中执行此操作,并且执行速度足够快。

    【讨论】:

      【解决方案2】:

      通常所有 PHP 脚本都有超时 - 除非您从 CLI 运行 - 所以您的第一个方法将工作 30 到 60 秒(取决于您的服务器配置),然后将被强制终止。

      我倾向于建议一个命令行选项,甚至(这取决于您希望代码运行的频率)一个 cron 命令来执行它。

      【讨论】:

      • 它当然会从命令行运行。超时不是问题
      【解决方案3】:

      如果您正在执行大量 DB 调用,请在 php.ini 中执行 sleep。这样一来,您就无需支付 php 启动罚款、连接到数据库的罚款等……如果您在 bash 中睡觉,就会发生这种情况。

      当您执行 bash 循环时,您将在每次迭代时开始/运行/退出您的脚本,而这种开销在长时间运行的脚本中会迅速增加。

      另一方面,至少您每次都会从“干净”的环境开始,而不必担心脚本中的内存泄漏。您可能希望将两者结合起来,以便在 PHP 中循环/睡眠(例如)100 次,然后退出并在 Bash 中循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 2013-03-03
        • 2010-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多