【问题标题】:PHP script listening on a directory侦听目录的 PHP 脚本
【发布时间】:2013-03-04 15:40:26
【问题描述】:

我有一个 PHP 脚本配置为使用 set_time_limit(0)for(;;) 无限循环。该脚本被编码为侦听特定目录并等待文件。当检测到文件时,执行一些命令并保持循环继续。到目前为止,这非常成功地满足了我的需求,但我有一些顾虑。

在 PHP 中创建无限循环是否有任何性能劣势? 如何配置我的服务器以使该脚本永远不会停止运行?或者当它停止运行时可能会提醒我?我也希望它在启动时启动。我有一个 SUSE SLES 10 盒子。

for (;;) {
    // Check for empty directory
    if (isEmptyDir($finishedDir)) {         
        // If so, move on
        continue;
    } else {
       // do stuff.
    }
}

【问题讨论】:

  • 运行无限循环没问题。只要记住偶尔睡觉,否则脚本会占用 CPU 周期作为早餐。
  • 您可以使用cron
  • 好吧。我在“做事”部分使用 sleep() ,但这仅在实际检测到文件时发生。无论是否找到文件,我都应该在每个循环结束时使用 sleep() 吗?

标签: php linux automation


【解决方案1】:

这可能有效,但 PHP 并不是真正为这些类似守护进程的工作而设计的。 Linux/Unix 有像inotify 这样的定制工具,可以保证性能更好,并且可以在发生更改事件时触发 PHP 脚本。

看到这个问题:Monitor Directory for Changes

【讨论】:

  • ++ PHP 有一个 Inotify 扩展。
【解决方案2】:

您可以考虑使用内存(例如:memcached、apc)而不是使用文件,因为访问文件比访问内存更昂贵。并考虑使用一点sleep()s 来增加时间间隔。

【讨论】:

    猜你喜欢
    • 2015-06-24
    • 2011-07-06
    • 2020-01-24
    • 2013-08-19
    • 2017-02-22
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多