一开始我以为这rsync
不是同步这里描述的所有内容rsync 的局限性?无法同步所有内容
现在过了一天,我发现它实际上仍在工作/运行,现在所有文件都在那里。问题是:我的 zip 不是 1gb,只有 200mb。
因为创建了 zip 文件,所以我以为rsync
它“完成”了,只是没有下载所有内容。我的逻辑是:tar 仅在rsync
完成时才执行。但事实似乎并非如此。
我如何才能tar
等到 rsync 完全完成?这样我就不会得到不完整的存档?
这是我的代码:
USER="myusername"
SERVER="myserverip"
PORT="22"
SOURCE="shop"
TARGET="/volume1/BACKUPS/MyFolder/MySubfolder/data/"
LOG="/volume1/BACKUPS/MyFolder/MySubfolder/backup_data.log"
mkdir /volume1/BACKUPS/MyFolder/MySubfolder/
rsync -avz --progress -e "ssh -p $PORT" $USER@$SERVER:$SOURCE $TARGET --delete >> $LOG 2>&1
tar -zcvf /volume1/BACKUPS/MyFolder/archivename-$(date +%Y-%m-%d_%H_%M_%S).tar.gz -C /volume1/BACKUPS/MyFolder/MySubfolder/ .
这也许是第二个问题,但在某种程度上与“仅在第一件事完成后才执行某项操作”有关。我如何检测存档是否也“完成”了?这样我就不会打开/解压仍在处理的存档?比如在存档实际完成后重命名文件。我如何确保重命名不会在某个时间开始,并等到前一行实际准备好,就像这样rsync
?
答案1
我不明白为什么这应该异步运行,只要原始脚本中的行末没有 & 符号。您是否将其作为 cron 作业运行?如果是,执行频率是否太高?
rsync 的日志实际上应该会有所帮助,至少可以查看它是否真的完成了。你检查过它们了吗?
除此之外,还有几种方法可以使这些执行更加可控,例如“如果上次成功,则执行此操作”。最简单的方法是
rsync -abc --exwhyzed xxx && tar -abc xxx
注意上面的双“&”符号。只有第一个命令成功完成后,才会执行后一个命令。
更具描述性的方式是if
陈述。例如
if rsync -abc --exwhyzed xxx ; then
tar -abc xxx
fi
另外,为什么要将该选项与详细标志结合使用--progress
?当以 nun-interactively 方式运行并记录到文件时,这对我来说似乎没什么用。不过,这只是一个令人好奇的提示。