我在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是否已完成?
答案 0 :(得分:2)
使用grep和lsof可能是最慢的方式,因为lsof将扫描所有内容。您可以通过执行以下操作来缩小lsof用于一个目录的范围:
lsof +D /var/f/ping
或类似。
这里有一个好的,易于阅读的lsof用途概述:
或者,您可以尝试:
http://www.thegeekstuff.com/2012/08/lsof-command-examples/
并查看是否更符合您的要求。
答案 1 :(得分:0)
您需要将缓存队列模式用于此类任务。通过cron在后台进行ping操作,并创建具有作业状态的表或文件。