通过这个 cron 脚本,我试图让 Rsync 工作
*/1 * * * * /root/backup.sh `date +today/\%M`
以及如下所示的 shell 脚本
#!/bin/bash -x
PATH=/bin:/usr/bin:/sbin:/usr/sbin
REMOTE="REMOTEADDRESS"
RSYNC=/usr/bin/rsync
评论:这个有效
$RSYNC -aqz --exclude-from '/home/root/backups/backup-exclude.txt' /var/www/html $REMOTE:backups/
评论:这失败了
$RSYNC -aqz --exclude-from '/home/root/backups/backup-exclude.txt' /var/www/html $REMOTE:$1/
我无法理解为什么传递的参数没有正确传递给脚本。在日志中,一切看起来都应该如此。
更新 cron 传递参数而不将其包含在脚本中的原因是有一个备份计划,该计划允许: - 每天每小时覆盖一次备份 - 每月覆盖一次每天备份 - 每月一次持久备份
传递参数时的错误是RSync无法在远程服务器上mkdir。它可以与任何静态线路一起使用。日志显示使用当前 cron 时传递的正确目录。
答案1
dest/dir
您必须确保远程计算机中存在您尝试复制到的目录( ):
rsync -aqz ./ user@host:dest/dir
至少,所有目录(最后一个目录除外)都应该已经存在。这与 mkdir 的行为相同mkdir
: mkdir 只会创建最后一个目录(默认情况下,该-p
选项可以更改它)。也就是说:除非远程计算机上存在,rsync
否则将会失败。/home/user/dest/dir
那是与相对的目录。
同样的情况也发生在绝对目录(以 开头的目录/
):
rsync -aqz ./ user@host:/home/user/dest/dir
规则完全相同,但目录不同假定位于用户主目录,但可以位于任何地方(当然,用户必须具有写入权限)。
在附加测试中,我发现 ifrsync
将使用如下目录:
newdir/testdir
至少目录 newdir 必须存在。这与 mkdir 完全相同。mkdir newdir/testdir
如果没有newdir
dir,A将失败。
我使用与您报告的相同的脚本对其进行了测试:
- 与固定目录一起使用,
- 参数上的给定目录,
- 脚本
$1
参数上的给定目录 - 无论有没有 cron,上述所有内容都会重复。
在所有情况下,缺少初始目录两部分目录获取 rsync 失败。