使用 Crontab 和 Rsync 进行自动备份在本地机器上有效,但无法通过 ssh 在远程机器上进行

使用 Crontab 和 Rsync 进行自动备份在本地机器上有效,但无法通过 ssh 在远程机器上进行

我正在尝试制作一个自动备份系统,每 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.远程脚本的自动化

我尝试过

  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

无需将它们放入rootcrontab中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/

相关内容