使用 rsync 的 ssh 连接操作超时

使用 rsync 的 ssh 连接操作超时

我使用 rsync 在本地设备上备份远程服务器,但当我将其与 cron 作业结合使用时,我的 ssh 超时了。需要说明的是,数据存储在远程服务器上,而我希望将其存储在本地服务器上。备份请求必须从我的本地服务器发送到远程服务器。

当我在终端中输入如下命令时,备份数据的命令就可以起作用:

rsync -chavzP --stats USERNAME@IPADDRES: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP

但是当我将它与这样的 cron 作业结合起来时:

10 11 * * * rsync -chavzP --stats USERNAME@IP_ADDRESS: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP

ssh 连接超时。当 cronjob 执行时,它会向 root 用户发送一封邮件,输出如下:

From local.xx.xx.xx  Tue Jul  2 11:20:17 2013
X-Original-To: username
Delivered-To: [email protected]
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <username@server> rsync -chavzP --stats USERNAME@IPADDRES: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=username>  
X-Cron-Env: <USER=username>
X-Cron-Env: <HOME=/Users/username>
Date: Tue,  2 Jul 2013 11:20:17 +0200 (CEST)

ssh: connect to host IP_ADDRESS port XX: Operation timed out
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-42/rsync/io.c(452)          [receiver=2.6.9]

因此,rsync 命令在终端中输入时有效,但在 cronjob 中使用时无效。有人能解释一下吗?

答案1

当您从 cron 运行命令时,它无法像从 shell 运行命令那样访问您的环境信息。这意味着它找不到您的 ssh 密钥,或您用于设置 SSH 代理的任何环境变量。

如果您使用无密码密钥,请将 rsync 行更改为以下内容:

rsync -chavzP -e "ssh -i /Users/username/.ssh/YOUR_PRIVATE_KEY_HERE" --stats USERNAME@IP_ADDRESS: PATH_TO_BACKUP LOCAL_PATH_TO_BACKUP

相关内容