2015-07-10 2 views
1

У меня есть PHP-скрипт работает на Debian, который вызывает команду пинг и перенаправляет вывод в файл с помощью Exec():тест, если файл открыт с PHP остается открытым

exec('ping -w 5 -c 5 xxx.xxx.xxx.xxx > /var/f/ping/xxx.xxx.xxx.xxx_1436538580.txt &'); 

РНР скрипт, то есть while, который сканирует папку/var/f/ping/и проверяет, завершил ли пинг пингу. Я попытался проверки вывода с помощью:

exec('lsof | grep /var/f/ping/xxx.xxx.xxx.xxx_1436538580.txt'); 

, чтобы увидеть, если файл был еще открыт, но это занимает Lsof около 10-15 секунд, чтобы вернуть свои результаты, что является слишком медленным для того, что нам нужно. В идеале он должен иметь возможность проверить это в течение 2 или 3 секунд.

Есть ли более быстрый/лучший способ проверить, завершен ли пинг?

ответ

2

Использование 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

и посмотреть, если это соответствует вашим требования лучше.

+0

Это именно то, что мне нужно. Это резко ускорило его. Благодаря! – raphael75

0

Для выполнения таких задач вам понадобится дефферированный шаблон очереди. Сделайте ping в фоновом режиме cron и создайте таблицу или файл с статусами работы.

Смежные вопросы