测试从php打开的文件是否仍然打开

时间:2015-07-10 15:25:42

标签: php file ping lsof

我在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');

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

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

2 个答案:

答案 0 :(得分:2)

使用grep和lsof可能是最慢的方式,因为lsof将扫描所有内容。您可以通过执行以下操作来缩小lsof用于一个目录的范围:

lsof +D /var/f/ping

或类似。

这里有一个好的,易于阅读的lsof用途概述:

TartanLlama

或者,您可以尝试:

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

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

答案 1 :(得分:0)

您需要将缓存队列模式用于此类任务。通过cron在后台进行ping操作,并创建具有作业状态的表或文件。