Rsync cron을 생성한 다음 폴더를 tar해 보십시오.

Rsync cron을 생성한 다음 폴더를 tar해 보십시오.

첫 번째 장애물에서 막혔어요!

Bash 스크립트에서 여러 명령을 실행하고 싶습니다. 먼저 다음과 같은 일부 디렉토리를 rsync하십시오.

rsync -e ssh -az [email protected]:/home /location/of/local/folder

그런 다음 파일을 압축하고 다음과 같이 다른 곳에 복사하십시오.

cd /location/of/local/folder
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz home

이것이 의미가 있기를 바랍니다.

문제는 분명히 디렉토리가 tarred되기 전에 rsync가 완료되기를 원한다는 것입니다. 그렇다면 tar명령을 실행하기 전에 rsync가 완료되었는지 확인하는 데 사용할 수 있는 코드가 있습니까 ?

예를 들어(의사 코드)

rsync
while(is syncing){
    sleep 10
}
tar

아니면 .sh첫 번째 줄이 완료되고 종료된 후에만 내 스크립트가 다음 줄을 실행합니까?

답변1

쉘 스크립트의 명령은 순차적으로 실행됩니다. 첫 번째 명령이 완료되면 다음 명령은 rsync완료될 때까지 실행되지 않습니다.rsync

확인하려는 것은 rsync다음 명령으로 이동하기 전에 성공적으로 완료된다는 것입니다.

이것은 가장 우아한 솔루션은 아니지만 구현하기가 가장 쉽습니다.

rsync -e ssh -az [email protected]:/home /location/of/local/folder &&\
tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder

이는 종료 상태가 인 경우 에만 rsync작동한다는 점을 기억하세요 0. 다른 종료 상태와 명령 2는 실행되지 않습니다.

AND 및 OR 목록은 &&로 구분된 여러 파이프 중 하나의 시퀀스입니다.
및 || AND 및 OR 목록이 실행됩니다.
연관성을 남겼습니다. AND 목록의 형식은 다음과 같습니다.
    명령 1 && 명령 2
command2는 command1이 종료 상태 0을 반환하는 경우에만 실행됩니다.

rsync종료 값에 따라 다른 작업을 수행 하면 스크립트에 더 많은 지능을 추가할 수 있습니다.

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin

rsync -e ssh -az [email protected]:/home /location/of/local/folder

if [ $? != "0" ]
  then
   echo "There was a problem"
  else
   tar zcf /var/backups/home-`date +%Y%m%d`.tar.gz /location/of/local/folder
 fi

관련 정보