Мы делали это раньше различными способами.
Метод первый:
Если вы можете контролировать процесс отправки файлов, попросите его отправить сам файл, а затем файл дозорного. Например, отправьте реальный файл "contracts.doc"
с последующим однобайтовым "contracts.doc.sentinel"
.
Затем попросите ваш процесс слушателя следить за файлами дозорного. Когда один из них создан, вы должны обработать эквивалентный файл данных, а затем удалить оба.
Любой файл данных, который старше одного дня и не имеет соответствующего сторожевого файла, избавьтесь от него - это была неудачная передача.
Метод два:
Следите за самими файлами (в частности, за последней датой / временем изменения). Обрабатывать только те файлы, у которых время модификации было больше N
минут в прошлом. Это увеличивает задержку обработки файлов, но обычно вы можете быть уверены, что, если файл не был записан в течение пяти минут (например), это сделано.
Вывод:
Оба эти метода были успешно использованы нами в прошлом. Я предпочитаю первый, но нам пришлось использовать второй один раз, когда нам не разрешили изменить процесс отправки файлов.
Преимущество первого состоит в том, что вы знаете , что файл готов, когда появится файл дозорного. Как с lsof
(я предполагаю, что вы обрабатываете файлы, которые не открываются каким-либо процессом, как готовые к обработке), так и с временными метками, возможно, что FTP потерпел крах в середине, и вы можете обрабатывать половину файла.