我有 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。
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
来抑制该消息,)
答案1
我比较了 5 台不同服务器之间所描述的行为,只有与一台特定服务器的连接存在此问题。
检查 md5 校验和后,我确信文件是相同的。
由于警告不会影响任何内容,因此我决定隐藏该消息。
现在,我已经修改了服务器上的备份脚本,因此在使用 ssh 的情况下,它首先通过以下方式将输出记录到文件中: >> $BACKUP_LOGS_FILE 2>&1
在命令末尾。
在脚本的最后,我使用 grep 过滤掉输出:grep -v 'Connection to xxx.xxx.xxx.xxx closed by remote host.' $BACKUP_LOGS_FILE
但是,如果有人有任何解释可能导致此问题的原因,请随时添加您的答案。