2013-02-09 3 views
3

У меня есть SFTP-сервер (debian ssh server), где удаленные пользователи загружают один большой файл в конкретный каталог.Завершить загрузку файла SFTP

Моя задача состоит в том, что мне нужно, чтобы обнаружить:

1), что новый файл присутствует.

2) что процесс загрузки/передачи выполнен.

Что было бы лучшим способом сделать это? Может быть, для этого есть некоторые инструменты?

Логическое мышление Я могу обнаружить на первом этапе, что новый файл присутствует в каталоге. А во второй фазе, затем цикл/дождитесь, пока пользователь SFTP не отключится !? После этого я мог стрелять следующий процесс ...

THx & приветствий, Питер

ответ

2

Для задачи 1) можно использовать inotify API для просмотра каталога изменений. Вы не говорите, какой язык программирования вы используете. В Perl вы должны использовать Linux::Inotify, в Python pynotify.

Для проблемы 2) один из способов - подождать, пока сеанс ssh не отключится, а другой - также использовать inotify для просмотра уведомлений о закрытии файла.

0

У меня была аналогичная ситуация. Хотя я использовал АОН, но подход мог бы помочь.

Вы можете загрузить файл с некоторым временным расширением. например bigFile.txt.temp. После загрузки файла rename нужно указать имя файла i.e bigFile.txt и удалить временный файл. JSCH ChannelSftp. В АОH переименование выполняет только один файл. Поэтому вам не нужно явно удалять временный файл.

Перед загрузкой любой более новой версии файла проверьте наличие временного файла - bigFile.txt.temp. Если он существует, это значит, что файл в настоящее время загружается. установить код ответа или дождаться отключения сеанса.

0

В моем случае использования достаточно посмотреть, подключены ли какие-либо пользователи через SFTP. Если это так, я просто рассмотрю все заблокированные файлы.

Это может быть сделано (в Linux/OpenSSH) с помощью команды ps -ef способом, описанным here.

Cheers!

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