URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 86985
[ Назад ]

Исходное сообщение
"Проблема с переносом файлов по FTP"

Отправлено d_pilot , 23-Окт-09 09:09 
Имеется следущая система:
FTP сервер. На сервере создаются файлы в дериктории. Клиент скриптом по расписанию по FTP копирует файлы себе и удаляет с сервера. Проблема в том, когда имеем файл, который ещё не записан до конца, он не удаляется и в итоге дублируется. Как этого избежать? как сделатья так чтобы не записаный до конца файл не копирывался?

Содержание

Сообщения в этом обсуждении
"Проблема с переносом файлов по FTP"
Отправлено бусик , 23-Окт-09 09:40 
>Имеется следущая система:
>FTP сервер. На сервере создаются файлы в дериктории. Клиент скриптом по расписанию
>по FTP копирует файлы себе и удаляет с сервера. Проблема в
>том, когда имеем файл, который ещё не записан до конца, он
>не удаляется и в итоге дублируется. Как этого избежать? как сделатья
>так чтобы не записаный до конца файл не копирывался?

а клиент каким образом должен узнать, до конца файл записан на сервере или нет? постановка задачи весьма интересная)


"Проблема с переносом файлов по FTP"
Отправлено d_pilot , 23-Окт-09 09:47 
>>Имеется следущая система:
>>FTP сервер. На сервере создаются файлы в дериктории. Клиент скриптом по расписанию
>>по FTP копирует файлы себе и удаляет с сервера. Проблема в
>>том, когда имеем файл, который ещё не записан до конца, он
>>не удаляется и в итоге дублируется. Как этого избежать? как сделатья
>>так чтобы не записаный до конца файл не копирывался?
>
>а клиент каким образом должен узнать, до конца файл записан на сервере
>или нет? постановка задачи весьма интересная)

клиент ни как не узнает. в этом то и проблема :)


"Проблема с переносом файлов по FTP"
Отправлено ronin , 23-Окт-09 10:07 
>[оверквотинг удален]
>>>FTP сервер. На сервере создаются файлы в дериктории. Клиент скриптом по расписанию
>>>по FTP копирует файлы себе и удаляет с сервера. Проблема в
>>>том, когда имеем файл, который ещё не записан до конца, он
>>>не удаляется и в итоге дублируется. Как этого избежать? как сделатья
>>>так чтобы не записаный до конца файл не копирывался?
>>
>>а клиент каким образом должен узнать, до конца файл записан на сервере
>>или нет? постановка задачи весьма интересная)
>
>клиент ни как не узнает. в этом то и проблема :)

Копировать во временный файл на том же разделе диска. По окончании копирования - переименовать/переместить в директорию FTP сервера.


respect,
ronin


"Проблема с переносом файлов по FTP"
Отправлено d_pilot , 23-Окт-09 10:13 
>[оверквотинг удален]
>>>или нет? постановка задачи весьма интересная)
>>
>>клиент ни как не узнает. в этом то и проблема :)
>
>Копировать во временный файл на том же разделе диска. По окончании копирования
>- переименовать/переместить в директорию FTP сервера.
>
>
>respect,
>ronin

было бы всё так просто - небыло бы вопроса. файлы создаются приложением, код которого закрыт.


"Проблема с переносом файлов по FTP"
Отправлено Pahanivo , 23-Окт-09 10:20 
>[оверквотинг удален]
>>
>>Копировать во временный файл на том же разделе диска. По окончании копирования
>>- переименовать/переместить в директорию FTP сервера.
>>
>>
>>respect,
>>ronin
>
>было бы всё так просто - небыло бы вопроса. файлы создаются приложением,
>код которого закрыт.

напрягу свои телепатические способности )))
вероятно у тебя создается какойто лог или датафайл на сервере - создается он у тебя скорей всего регулярно те старые файлы через определенный промежуток времени уже закрыты
те есть некий таймаут спустя который можно по дате модификации файла с определенной долей уверенности сказать что он закрыт - скриптом учитывает этот таймут и все - те не копируем самые последние файлы
если я ошибаюсь изложи задачу поподробнее


"Проблема с переносом файлов по FTP"
Отправлено d_pilot , 23-Окт-09 12:09 
>[оверквотинг удален]
>>код которого закрыт.
>
>напрягу свои телепатические способности )))
>вероятно у тебя создается какойто лог или датафайл на сервере - создается
>он у тебя скорей всего регулярно те старые файлы через определенный
>промежуток времени уже закрыты
>те есть некий таймаут спустя который можно по дате модификации файла с
>определенной долей уверенности сказать что он закрыт - скриптом учитывает этот
>таймут и все - те не копируем самые последние файлы
>если я ошибаюсь изложи задачу поподробнее

Думал обойдётся без этого.
Есть софт который генерит лог. Логов много (порядка 150 файлов в минуту) этот лог вырезается клиентом, который этот лог анализирует и ложит в базу. Повторятеся это каждые 5 минут. И всё бы хорошо, но некоторые лог файлы пишутся быстро, а некотороые медленно(разный объём данных в файле). Т.е. то что файл послдний - не гарантирует, что именно он не закрыт.

Есть вариант формировать список файлов, у которых закрыты дескрипторы за пару секунд до того как выполница клиентский скрипт.
Так же есть вариант на клиенте удалять файлы, которые не удалось удалить на сервере.

Просто интересно, какие ещё решения возможны. Хотел уже было написать демона, который отслеживал файлы в одной директории и при закрытии файла перемещал их в другую :) Но не знаю с какой стороны подстуиться.