bash - 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/
解决方案
我比较了 5 台不同服务器之间的描述行为,只有与一台特定服务器的连接存在此问题。
用 md5 校验和检查后,我确定文件是相同的。
由于警告不会影响任何事情,因此我决定禁止显示该消息。
现在,我已经修改了服务器上的备份脚本,所以在使用 ssh 的情况下,它首先将输出记录到文件中: >> $BACKUP_LOGS_FILE 2>&1
在命令的末尾。
在脚本的最后,我使用 grep 过滤掉输出:grep -v 'Connection to xxx.xxx.xxx.xxx closed by remote host.' $BACKUP_LOGS_FILE
但是,如果有人对可能导致此问题的原因有任何解释,请随时添加您的答案。
推荐阅读
- php - 如何在 PHP 中使用 Itext?
- mysql - mysql select按if else条件计数
- c++ - 我的项目的属性配置正确,但Visual Studio仍然无法打开包含头文件
- c - 如何在C中将a字符串拆分为单独的单词,其中空格不是恒定的?
- powerbi - 根据月份和年份列计算工作日数 - DAX
- python - 在 python 中模拟 Elasticsearch API
- php - Wordpress:允许上传媒体中的 zip 文件
- jenkins-pipeline - jenkins 共享库 groovy 类是否支持 groovy trait
- swift - Swift,如何从 HTTP 请求返回数据?
- node.js - Angular 8 ajax有时很慢