Механизм блокировки файлов SFTP

Как я могу убедиться, что файл, загруженный через SFTP (в базовой системе Linux), остается заблокированным во время передачи, поэтому автоматическая система не будет его читать?

Есть ли опция на стороне клиента? Или на стороне сервера?

    Протокол SFTP поддерживает блокировку с версии 5. См. Спецификацию .

    Вы не указали, какой сервер SFTP вы используете. Поэтому я предполагаю самый распространенный, OpenSSH. OpenSSH поддерживает только SFTP версии 3, поэтому он не поддерживает блокировку.

    В любом случае, даже если ваш сервер поддерживает блокировку файлов, большинство SFTP-клиентов / библиотек не поддерживают SFTP-версию 5. Или даже если они это сделают, они не будут поддерживать функцию блокировки. Обратите внимание, что блокировка явно, клиент должен ее запросить.

    Существуют некоторые общие способы решения проблемы:

    • Как было предложено @ user1717259, вы можете загрузить клиент «сделанный» файл после завершения загрузки. Сделайте автоматическую систему ожидающей появления файла «done».
    • У вас может быть выделенная папка «загрузить» и клиент (атомарно) перемещает загруженный файл в «сделанную» папку. Сделайте автоматическую систему только в папке «done».
    • Имейте соглашение об именах файлов для загружаемых файлов («.filepart») и попросите клиента (атомарно) переименовать файл после загрузки до его окончательного имени. Сделайте вашу автоматическую систему игнорировать файлы «.filepart».
      См. Статью (моя). Блокировка файлов при загрузке / загрузке во временное имя файла, например, для реализации этого подхода.
    • Валовой взлом – это периодически проверять атрибуты файлов (размер и время) и считать завершенную загрузку, если атрибуты не изменялись в течение некоторого интервала времени.

    Типичным способом решения этой проблемы является загрузка вашего реального файла, а затем загрузка пустого файла «done.txt».

    Автоматическая система должна дождаться появления файла «done», прежде чем пытаться прочитать настоящий файл.

    Простой механизм блокировки файлов для SFTP – это сначала загрузить файл в каталог (папку), где процесс чтения не просматривается. Вы можете «сделать» альтернативную папку, используя команду sftp> mkdir. Загрузите файл в альтернативный каталог, а не в конечный целевой каталог. После завершения команды SFTP> put выполните следующие действия: SFTP> move alternate_path / filename destination_path / filename . Поскольку SFTP «move» просто переключает указатели на файлы, он является атомарным, поэтому он является эффективным блокировкой.

    Давайте будем гением компьютера.