rsync 代码将运行,但不在 cron 中

pet*_*ies 7 backup cron rsync

我有一个 Web 服务器 (odin) 和一个备份服务器 (jofur)。在 jofur 上,我可以运行以下代码将我的 Web 目录(通过密钥身份验证)从 odin 同步到 jofur:

rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin
Run Code Online (Sandbox Code Playgroud)

如果我在命令行中输入它,一切都会完美同步:

myuser@jofur:~$ rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin

receiving incremental file list

sent 23 bytes  received 1921 bytes  1296.00 bytes/sec
total size is 349557271  speedup is 179813.41
Run Code Online (Sandbox Code Playgroud)

我希望它每天早上运行,所以我编辑了我的 crontab 来阅读:

0 4 * * * rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin
Run Code Online (Sandbox Code Playgroud)

这不起作用。以下消息存放在 /var/mail/myuser 中:

无法创建目录“/home/myuser/.ssh”。主机密钥验证失败。rsync:连接意外关闭(到目前为止收到了 0 个字节)[接收器] rsync 错误:io.c(605) 上的无法解释的错误(代码 255)[接收器 = 3.0.9]

我不确定这个错误是什么意思。我对盲目地使用权限持谨慎态度,因为我不想打开任何后门。有什么建议?

sou*_*ser 2

很难判断 cron 是否使用了错误的 rsync 二进制文件,或者 rsync 是否需要某个 cron 中未设置的变量。请如下所示设置 stdout/stderr 并传递日志文件的输出

另外,尝试从命令行执行“which rsync”;这将告诉您正在从命令行使用哪个 rsync。

0 4 * * * rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin > /tmp/cron_output.log 2>&1

编辑 :

您可以创建一个名为 SOME_DIR/cron_job_rsync.sh 的 shell 脚本,其中包含以下内容。确保设置了执行位。

#!/bin/sh
/usr/sbin/rsync -avz -e ssh backups@odin.mydomain.net:/home/backups /home/myuser/odin

并修改cronjob如下所示

0 4 * * * SOME_DIR/cron_job_rsync.sh >/tmp/cron_output.log 2>&1