Crontab + Rsync - 什么也没发生:(

Crontab + Rsync - 什么也没发生:(

您好,我的 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 -eniklas

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 命令运行它,这样就成功了。现在同步工作正常。

相关内容