我每晚通过 scp 自动备份和传输文件。
我意识到我通过协议本身获得了数据包级校验和,但我想知道最佳做法是什么,以确保传输没有失败或部分完成等。
我可以使用 rsync,但我的需求很简单,我只想确保:
- 传输中没有错误
- 如果有则重试(这样当我去恢复时就不会发现我已经过期 4 天了)
答案1
scp 不保证文件的完整性,因此进行源和目标之间的校验和比较是明智的。
您提到您的需求很简单,但 rsync 不一定会增加复杂性,并提供更多功能,让您更放心,您的同步数据是合法的。
rsync -ave ssh /your/source/file remotehost:/your/dest/file
如果$?
(退出状态)不是 0(成功),则重试/警报/等...如果您正在同步整个目录,rsync 也更适合,特别是如果您需要在失败时重试,因为每次连续运行后增量同步的速度都会显著加快。
答案2
我不太清楚 rsync 如何不符合您的简单需求。
rsync -avPe ssh 用户@主机:/that/dir /goes/here
但是,如果您确实想使用 scp,只需循环您的 scp 并测试其退出条件..类似于..
#!/bin/bash
STATUS=1
while [ $STATUS -ne 0 ]; do
echo "scp'ing..."
scp -r thisstuff/ user@host:/overthere
STATUS=$?
done
如果成功则 scp 将返回 0,如果错误则返回 > 0。