rsync 備份期間遠端主機關閉與 xx.xx.xx.xx 的連接
我有 2 個網路伺服器。為簡單起見,我們稱它們為本地和遠端。本地:我只有 ftp 和 cron 訪問,遠端:ssh/ftp
我編寫了一個簡單的備份腳本,它將文件打包,然後將它們發送到遠端伺服器。(在 cron 中呼叫)本地伺服器被添加到遠端伺服器的 ~/.ssh/authorized_keys 中,以便在不使用密碼的情況下進行連接。
cd $FILES_TO_BACKUP_DIR for dir in */ do base=$(basename "$dir") tar -czpf "$BACKUP_DIR/${base}-$DATE.tar.gz" "$dir" rsync -az -e "ssh -p $REMOTE_HOST_PORT -i $KEY_PATH" $BACKUP_DIR $REMOTE_HOST_ADDRESS:$REMOTE_BACKUP_DIR rm $BACKUP_DIR/${base}-$DATE.tar.gz done
我認為它工作正常 - 文件出現在遠端伺服器上。我比較了所有文件的大小和其中一些文件的校驗和。一切都匹配。
但是我不確定這條消息:
Connection to xxx.xxx.xxx.xxx closed by remote host.
每次呼叫腳本時它出現的次數不同。出於測試目的,我複制了大約 20 個焦油。
我
set -x
在腳本的開頭添加了在執行時顯示每一行。這是日誌的一部分:
./backup.sh + cd /home/tobackup/ + for dir in '*/' ++ basename lgsm/ + base=lgsm + tar -czpf /home/test/_backups/backups-tmp/lgsm-09-01-2020.tar.gz lgsm/ + rsync -vaz -e 'ssh -p PORT' /home/test/_backups/backups-tmp USER@IP:/home/backups_test/_backups/backups sending incremental file list backups-tmp/ backups-tmp/lgsm-09-01-2020.tar.gz backups-tmp/serverfiles-09-01-2020.tar.gz Connection to IP closed by remote host. sent 237,480,856 bytes received 10,786 bytes 6,168,614.08 bytes/sec total size is 241,069,740 speedup is 1.02 + rm /home/test/_backups/backups-tmp/lgsm-09-01-2020.tar.gz + for dir in '*/' ++ basename log/ + base=log + tar -czpf /home/test/_backups/backups-tmp/log-09-01-2020.tar.gz log/ + rsync -vaz -e 'ssh -p PORT' /home/test/_backups/backups-tmp USER@IP:/home/backups_test/_backups/backups sending incremental file list backups-tmp/ backups-tmp/log-09-01-2020.tar.gz Connection to IP closed by remote host. sent 900 bytes received 81 bytes 654.00 bytes/sec total size is 237,899,887 speedup is 242,507.53 + rm /home/test/_backups/backups-tmp/log-09-01-2020.tar.gz + for dir in '*/' ++ basename serverfiles/ + base=serverfiles + tar -czpf /home/test/_backups/backups-tmp/serverfiles-09-01-2020.tar.gz serverfiles/
我很好奇為什麼會發生這種情況,如果可能的話,我該如何防止這種行為。(如果它看起來不重要,我想隱藏該消息,但保留潛在的其他錯誤消息。我嘗試使用
rsync -q
來抑制該消息,)
我比較了 5 台不同伺服器之間的描述行為,只有與一台特定伺服器的連接存在此問題。
用 md5 校驗和檢查後,我確定文件是相同的。
由於警告不會影響任何事情,因此我決定禁止顯示該消息。
現在,我已經修改了伺服器上的備份腳本,所以在使用 ssh 的情況下,它首先將輸出記錄到文件中:
>> $BACKUP_LOGS_FILE 2>&1
在命令的末尾。在腳本的最後,我使用 grep 過濾掉輸出:
grep -v 'Connection to xxx.xxx.xxx.xxx closed by remote host.' $BACKUP_LOGS_FILE
但是,如果有人對可能導致此問題的原因有任何解釋,請隨時添加您的答案。