我们希望通过一台服务器运行某个备份过程,基本上如下所示:
服务器 1 运行一个进程,将数据从服务器 2 复制到备份位置。
有没有我可以编写的脚本来执行此操作,无论是 scp、rsync 还是其他什么?
我们还希望覆盖目标位置的内容,并在每次 crontab 运行时用更新的数据替换它。
答案1
这不需要脚本来激活。ssh
可以做你想要的。
ssh user@server2 "/script/backup.sh"
将在“server2”上为“用户”运行 /script/backup.sh
该脚本可以保存您需要备份的所有命令,包括使用 rsync 将结果复制到另一个系统(或第一个系统)。
答案2
建立无密码服务器连接
- 在本地机器上生成 ssh 证书:
ssh-keygen
- 并在目标/远程机器上注册该机器:
ssh-copy-id username@destination
备份命令:
如果您更喜欢覆盖内容,那么“覆盖”部分也必须弄清楚;但简而言之,不需要存档轮换软件,您可以使用普通的tar
或scp
移动文件,就像这种半单行程序。
(为了将其放在一行中,请;
像这样添加:cd bak-this-dir;
。crontabs 中需要单行代码。)
cd backup-this-directory
tar czvf - | ssh username@destination "cd backup-destination; dd | tar xzf -"
或者反过来——如果你想要将文件上传到本地机器:
cd backup-destination
ssh username@destination "cd backup-this-directory; tar czf -" | dd | tar xzvf -
变体:
- 你可以让文件保持压缩状态,在这种情况下,
dd
你的接收端可能会dd of=`date '+%F'`-backup.tgz
z
如果源难以压缩(如视频)或者带宽不是限制,则不需要tar 选项。
评论:
%
字符必须在 chron tab 中进行转义,dd
为你的变速箱添加速度计,- 记住将其
cd
放入适当的目录中,否则tar
可能会因主目录中散落着来自备份源的许多小文件而造成“tar 炸弹”。