我有一个 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]
我不确定这个错误是什么意思。我对盲目地使用权限持谨慎态度,因为我不想打开任何后门。有什么建议?
很难判断 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