测试从 php 打开的文件是否仍然打开
test if file opened from php is still open
我在 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 秒才能 return 它的结果,这对于我们需要的来说太慢了。理想情况下,它应该能够在 2 或 3 秒内检查出来。
是否有 faster/better 方法来测试 ping 是否已完成?
您需要延迟队列模式才能完成此类任务。通过 cron 在后台制作猪并创建 table 或具有工作状态的文件。
将 grep 与 lsof 一起使用可能是最慢的方法,因为 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
看看是否更符合您的要求。
我在 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 秒才能 return 它的结果,这对于我们需要的来说太慢了。理想情况下,它应该能够在 2 或 3 秒内检查出来。
是否有 faster/better 方法来测试 ping 是否已完成?
您需要延迟队列模式才能完成此类任务。通过 cron 在后台制作猪并创建 table 或具有工作状态的文件。
将 grep 与 lsof 一起使用可能是最慢的方法,因为 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
看看是否更符合您的要求。