2015-07-10 74 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並創建包含作業狀態的表或文件。