您好,我的 crontab 中有一行有趣的代码如下:(通过运行 crontab -e 编辑并保存)
23 * * * * rsync -av --delete [email protected]:/var/www/ /home/niklas >> /home/niklas/scripts/logfile
但是..这一行没有任何作用(第 24 分钟没有使用带宽,日志文件中没有输出)有人能告诉我哪里出了问题吗?
顺便说一句:服务器的身份验证是通过无密码的 pgp 密钥进行的。这就是为什么用户需要是“niklas”
编辑:
运行type rsync
并返回/usr/bin/rsync
但已经在路径上:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
编辑2:
创建 /usr/bin/backup 包含:
rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
chmod +x 将它并将 chrontab 中的条目更改为
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
16 * * * * /usr/bin/backup
仍然...它不起作用,但是 /var/log/syslog 说:
Aug 1 15:16:01 niklas-desktop CRON[9421]: (niklas) CMD (/usr/bin/backup)
请帮忙
编辑3:
改变
rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
到
/usr/bin/rsync -av --delete [email protected]:/var/www/ /home/niklas/server4you_www >> /home/niklas/scripts/logfile
正如预期的那样,不会改变(不令人满意的)结果。但是,`putting echo 'xyz' > log 将 xyz 写入日志文件
所以...正如您可能猜到的那样...我的问题仍然没有解决。
|| echo "rsync died with error code $?"
向返回的备份脚本中添加:
rsync died with error code 5
也就是http://wpkg.org/Rsync_exit_codes建议的意思是“启动客户端-服务器协议时出错”,所以我猜 ssh 有点问题。我再次使用带有密码的 pgp 密钥,但该密码在启动时默认由密钥环解锁,这样我就可以 ssh[电子邮件保护]无需输入密码。是否可以将 ssh 密钥的密码发送给 rsync?
答案1
将完整路径放到 rsync 中/usr/bin/备份,因此该文件中的行将开始
/usr/bin/rsync <your other options>
并尝试输入如下代码
logger -t my_backup Hello from /usr/bin/backup
到你的 /usr/bin/backup 脚本,看看是否有任何内容记录到 /var/log/messages(或其他日志文件,取决于你的系统日志设置)。或者,你可以将记录器替换为
echo "Hello from /usr/bin/backup" >/tmp/backuptest
哦,有时 SELinux 可能会引发您遇到的问题。它正在使用中吗?
希望这可以帮助。
编辑:让你的 /usr/bin/backup rsync 行像这样
/usr/bin/rsync <your options> || echo "rsync died with error code $?" >> your_log
也许我们会明白为什么 rsync 如此令人不安。
又一次编辑:好的,rsync 错误代码 5。这意味着
rsync error: error starting client-server protocol
大多数情况下,这种情况是由于密码错误而发生的,尽管消息看起来很神秘。
如果您以 niklas 身份手动运行 rsync 脚本,那么它可以工作,对吗?
编辑3:发现你提到了钥匙圈。我认为 cron 在您登录时使用的密钥环与用户 niklas 不同。这就是为什么尝试从 cron 运行登录时登录会变成 p00f 的原因。您可以改用无密码 RSA 密钥,然后仅限制它运行 rsync 吗?
编辑4: 使用RSYNC_密码环境变量。可以通过将其放在备份脚本的顶部来实现:
export RSYNC_PASSWORD="myprecioussssssss"
或者如果你想将密码存储在文本文件中,请创建一个文件并提供--密码文件rsync 选项。
如果这不起作用,您可以提供-e 'ssh -o IdentityFile=/路径/到/你的文件rsync 选项。
答案2
您在 crontab 中包含了一个用户名字段。但该字段仅存在于系统 crontab ( /etc/crontab
) 中,而不存在于您使用 编辑的每个用户 crontab 中。因此,以用户身份crontab -e
编辑 crontab ,并使内容crontab -e
niklas
23 * * * * rsync -av --delete [email protected]:/var/www/ /home/niklas >> /home/niklas/scripts/logfile
您运行的用户crontab -e
应该已经收到一封包含错误消息的邮件(抱怨这niklas
不是有效的命令)。如果没有,则您的邮件设置可能有问题。
答案3
您可能需要 rsync 命令的完整路径。
例如,在 Fedora 13 上,你可以将 rsync 替换为 /usr/bin/rsync
答案4
在我的例子中 (ubuntu),创建一个 shellscript 并将 rsync 命令放在那里,而不是从 crontab as 命令运行它,这样就成功了。现在同步工作正常。