【问题标题】:test if file opened from php is still open测试从 php 打开的文件是否仍然打开
【发布时间】:2015-07-10 15:25:41
【问题描述】:

我有一个在 Debian 上运行的 PHP 脚本,它调用 ping 命令并使用 exec() 将输出重定向到一个文件:

exec('ping -w 5 -c 5 xxx.xxx.xxx.xxx > /var/f/ping/xxx.xxx.xxx.xxx_1436538580.txt &');

然后 PHP 脚本有一个 while 循环扫描 /var/f/ping/ 文件夹并检查 ping 是否已完成写入。我尝试使用以下命令检查输出:

exec('lsof | grep /var/f/ping/xxx.xxx.xxx.xxx_1436538580.txt');

查看文件是否仍然打开,但返回结果需要 lsof 大约 10-15 秒,这对于我们需要的东西来说太慢了。理想情况下,它应该能够在 2 或 3 秒内检查到这一点。

是否有更快/更好的方法来测试 ping 是否完成?

【问题讨论】:

    标签: php file ping lsof


    【解决方案1】:

    在 lsof 中使用 grep 可能是最慢的方式,因为 lsof 会扫描所有内容。您可以通过以下方式将 lsof 使用的范围缩小到一个目录:

    lsof +D /var/f/ping
    

    或类似的。

    这里有一个很好且易于阅读的 lsof 使用概述:

    http://www.thegeekstuff.com/2012/08/lsof-command-examples/

    或者,您可以尝试:

    http://php.net/manual/en/function.fam-monitor-file.php

    看看是否更符合您的要求。

    【讨论】:

    • 这正是我所需要的。这大大加快了速度。谢谢!
    【解决方案2】:

    您需要延迟队列模式来处理此类任务。通过 cron 在后台进行 ping,并创建包含作业状态的表或文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 2014-09-11
      • 2015-08-30
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多