SFTP文件锁定机制

Cyb*_*ula 8 sftp locking transfer

如何确保通过SFTP(在Linux基本系统中)上传的文件在传输过程中保持锁定状态,以便自动系统无法读取它?

客户端有选择吗?还是服务器端?

Mar*_*ryl 13

从版本5开始,SFTP协议支持锁定.请参阅规范.

您没有指定,您使用的是什么SFTP服务器.所以我假设最广泛的一个是OpenSSH.OpenSSH仅支持SFTP版本3,因此它不支持锁定.

无论如何,即使您的服务器支持文件锁定,大多数SFTP客户端/库也不支持SFTP版本5.或者即使它们支持,它们也不支持锁定功能.请注意,锁是显式的,客户端必须请求它.

这个问题有一些常见的解决方法:

  • 根据@ user1717259的建议,您可以让客户端在上传完成后上传"完成"文件.使您的自动系统等待"完成"文件出现.
  • 您可以拥有专用的"上传"文件夹,并让客户端(原子地)将上传的文件移动到"完成"文件夹.使您的自动系统仅查看"完成"文件夹.
  • 对上载的文件(".filepart")具有文件命名约定,并在上载到其最终名称后让客户端(原子地)重命名该文件.使您的自动系统忽略".filepart"文件.
    请参阅(我的)文章在上载/上传到临时文件名时锁定文件,例如实现此方法.
  • 一个严重的黑客是定期检查文件属性(大小和时间)并考虑上传完成,如果属性在一段时间间隔内没有改变.

  • cron脚本如何告知上传已完成? (2认同)

use*_*259 8

解决此问题的典型方法是上传您的真实文件,然后上传空的'done.txt'文件.

在尝试读取真实文件之前,自动系统应等待"完成"文件的出现.