Shell-Script

rsync 備份期間遠端主機關閉與 xx.xx.xx.xx 的連接

  • January 25, 2020

我有 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

但是,如果有人對可能導致此問題的原因有任何解釋,請隨時添加您的答案。

引用自:https://unix.stackexchange.com/questions/561396