2015-07-10 72 views
1

我在Debian上运行PHP脚本调用ping命令并执行exec()输出重定向到一个文件:测试从PHP打开的文件仍处于打开状态

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是否完成?

回答

2

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

lsof +D /var/f/ping 

或类似。交替

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

,你可以用实验:

有lsof的一个很好的和易于阅读的概述使用此处

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

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

+0

这正是我所需要的。这大大加快了速度。谢谢! – raphael75

0

您需要将此队列模式缓存到这种类型的任务中。由cron在后台创建ping并创建包含作业状态的表或文件。