我使用rsync备份我的本地设备上的远程服务器,但是当我将它与cron作业结合时,我的ssh超时。 只是要清楚,数据存储在远程服务器上,我希望它存储在我的本地服务器上。 备份请求必须从本地服务器发送到远程服务器。
当我在terminal中input数据时,备份数据的命令正在工作:
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命令在terminalinput时工作,但在cronjob中使用时不起作用。 有人可以解释吗?
当你从cron运行一个命令的时候,它不能像从shell运行的那样访问你的环境信息。 这意味着它没有find你的ssh密钥,或者你正在使用的任何环境variables来设置你的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