SFTP文件锁定机制

时间:2014-11-14 14:33:57

标签: locking sftp transfer

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

客户端是否有选项?还是服务器端?

3 个答案:

答案 0 :(得分:11)

SFTP协议支持从版本5开始锁定。请参阅specification

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

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

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

  • 根据@ user1717259的建议,您可以让客户端上传"完成"上传完成后提交文件。让您的自动化系统等待"完成"要出现的文件。
  • 你可以有专门的#34;上传"文件夹并让客户端(原子地)将上传的文件移动到"完成"夹。让您的自动化系统看上去"完成"仅文件夹。
  • 为要上载的文件(" .filepart")设置文件命名约定,并让客户端(原子地)在上传到其最终名称后重命名该文件。使您的自动化系统忽略" .filepart"文件。
    有关实施此方法的示例,请参阅(我的)文章Locking files while uploading / Upload to temporary file name
  • 严重黑客是定期检查文件属性(大小和时间)并考虑上传完成,如果属性在一段时间间隔内没有改变。

答案 1 :(得分:8)

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

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

答案 2 :(得分:0)

SFTP的简单文件锁定机制是首先将文件上载到读取进程的目录(文件夹)中。您可以使用sftp>“制作”备用文件夹。 mkdir命令。将文件上载到备用目录,而不是最终目标目录。一旦SFTP> put命令完成,然后像这样移动:  SFTP> 移动alternate_path / filename destination_path / filename 。由于SFTP“move”只是切换文件指针,因此它是原子的,所以它是一个有效的锁。