웹 서버가 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
그러나 이 문제의 원인에 대해 설명할 수 있는 사람이 있으면 언제든지 답변을 추가해 주시기 바랍니다.