首页 > 解决方案 > 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 个焦油。我添加了带有时间戳的回声,以检查它发生在哪一点,并且仅在创建 tar 之后。有时甚至在第一个循环运行时,连接还不应该建立。

我不认为它会破坏任何东西,但我很好奇为什么会发生这种情况,如果可能的话,我该如何防止这种行为。(我试过用rsync -q来抑制消息,但它不起作用。)

使用 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/

标签: bash

解决方案


我比较了 5 台不同服务器之间的描述行为,只有与一台特定服务器的连接存在此问题。

用 md5 校验和检查后,我确定文件是相同的。

由于警告不会影响任何事情,因此我决定禁止显示该消息。
现在,我已经修改了服务器上的备份脚本,所以在使用 ssh 的情况下,它首先将输出记录到文件中: >> $BACKUP_LOGS_FILE 2>&1在命令的末尾。

在脚本的最后,我使用 grep 过滤掉输出:grep -v 'Connection to xxx.xxx.xxx.xxx closed by remote host.' $BACKUP_LOGS_FILE

但是,如果有人对可能导致此问题的原因有任何解释,请随时添加您的答案。


推荐阅读