我正在尝试制作一个自动备份系统,每 5 分钟使用 Rsync 和 Crontab 在本地和远程同步 2 个文件夹
两台机器都在运行
Ubuntu Focal 20.04
文件夹源和目标
我的脚本保存在文件夹中
/etc/local/<file-here>
来源:/home/maurice/dev/
当地目的地:/media/maurice/SSD/dev/
以下是脚本
本地脚本:
#!/bin/sh
rsync -avz /home/maurice/dev/ /media/maurice/SSD/dev/
远程脚本:
#!/bin/sh
rsync -e 'ssh -p 22' -avzp /home/maurice/dev/ maurice-Laptop.local:/home/maurice/dev/
这是我的 crontab 文件
#Local Backup Script
*/5 * * * * maurice /etc/local/rsyncLocal_script
#Remote Backup Script
*/5 * * * * maurice /etc/local/rsync_script
以下是哪些有效,哪些无效
在职的
1.本地备份工作完美
2.如果我手动运行远程脚本,它确实有效
3.我可以在本地和远程计算机上使用 ssh,无需密码,两台电脑的 ssh 密钥都添加到/home/maurice/.ssh/authorized_keys
不工作
1.远程脚本的自动化
我尝试过
- 更改远程脚本 从
#!/bin/sh
rsync -e 'ssh -p 22' -avzp /home/maurice/dev/ maurice-Laptop.local:/home/maurice/dev/
到
#!/bin/sh
rsync -e 'ssh -p 22' -avzp /home/maurice/dev/ maurice@ipaddres:/home/maurice/dev/
但之后我真的不知道还能做什么
谢谢,
答案1
这里的问题是,你crontab
在一个只需要六个字段的文件中对条目使用了七个字段的布局。(请参阅man 5 crontab
)
root
从的 crontab中删除条目并将maurice
其放入 的 中crontab
:
#Local Backup Script
*/5 * * * * /etc/local/rsyncLocal_script
#Remote Backup Script
*/5 * * * * /etc/local/rsync_script
无需将它们放入root
crontab中cron
,然后更改其权限以作为 运行maurice
。只需maurice
首先以作为 运行它们即可。
如果确实不可能,您需要使用系统 crontab(与 root 的 crontab 不同)。例如,创建一个代码片段文件/etc/cron.d/mybackups
并将行 - 包括 - 放在maurice
那里。
在这两种情况下,您都应该考虑捕获命令的输出。(如果有的话,您会看到以下样式的错误maurice: command not found
。)一种选择是附加错误日志记录:
*/5 * * * * /etc/local/rsyncLocal_script >/tmp/rsyncLocal.log 2>&1
就我个人而言,由于这两个脚本每五分钟运行一次,因此我会将这两个命令放入一个脚本中,
#!/bin/bash
#
# Backup locally
rsync -av /home/maurice/dev/ /media/maurice/SSD/dev/
# Backup remotely (if the server is available)
rsync -avz -e 'ssh -o ConnectTimeout=10' /home/maurice/dev/ maurice-Laptop.local:/home/maurice/dev/