Linux lftp镜像文件传输期间可能的争用条件?
我试图使用lftp mirror配置使本地文件夹[lftp\u source\u folder]和远程文件夹[lftp\u server\u path]保持同步 下面给出了连续运行它的脚本Linux lftp镜像文件传输期间可能的争用条件?,linux,shell,sftp,lftp,Linux,Shell,Sftp,Lftp,我试图使用lftp mirror配置使本地文件夹[lftp\u source\u folder]和远程文件夹[lftp\u server\u path]保持同步 下面给出了连续运行它的脚本 while true do lftp -f $BATCHFILE sleep 20 done $BATCHFILE主要包括以下内容: # sftp config + echo "mirror --Remove-source-files -R /lftp_source_folder /lft
while true
do
lftp -f $BATCHFILE
sleep 20
done
$BATCHFILE主要包括以下内容:
# sftp config +
echo "mirror --Remove-source-files -R /lftp_source_folder /lftp_server_path/" >> $BATCHFILE
但问题是,我有一个脚本,它将继续将文件移动到/lftp\u source\u文件夹
现在,我感到困惑的是,由于这种实现,是否有可能出现竞争条件
比如说
/lftp_source_folder/new_file.txt
[new_file.txt
仅为大小的50%]如果是竞争条件,解决方案是什么?如果在同一文件系统中移动文件,则不存在竞争条件
mv
只是执行一个rename()
操作,这是一个原子操作,它不复制文件数据
但是,如果您在不同的文件系统之间移动,您确实可以获得竞争条件。这是作为一个副本完成的,然后删除原始文件,当只复制了文件的一部分时,脚本可能会将文件上载到FTP服务器
解决方法是首先将文件移动到与/lftp\u source\u folder
相同文件系统上的临时文件夹中,然后将其从那里移动到/lftp\u source\u folder
。因此,当镜像脚本在那里看到它时,它保证是完整的