Linux
使用 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: username@username.local From: username@username.local (Cron Daemon) To: username@username.local 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 使用時無效。有人可以解釋一下嗎?
當您從 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