일반적으로 오프사이트에 저장되지만 때로는 마운트되는 보조 백업 드라이브가 있습니다. 설치된 경우 백업 드라이브를 보조 백업에 자동으로 복제하는 기능을 crontab에 추가하고 싶습니다. 나는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.
if [ -d $target_dir ]; then rsync -a --delete $src_dir $target_dir; fi
하지만 쉘 스크립트를 사용하지 않고 동일한 작업을 rsync에 요청할 수 있는 방법이 있는지 궁금합니다. 6.02*10^23 명령줄 옵션이 있다는 점을 고려하면...
답변1
다음은 작동할 수 있는 트릭입니다... 제 예에서 $target_dir이 "원격" 시스템(localhost)에 있으면 rsync가 성공하고 그렇지 않으면 실패합니다(원격 rsync를 실행하지 않음).
즉
src_dir=/etc;target_dir=/test/a;rsync -azp --rsync-path="[[ -d $target_dir ]] && rsync" $src_dir localhost:$target_dir
원격 디렉터리가 존재하지 않는 경우 실패 결과 코드는 12여야 합니다. 왜냐하면 다음 실패로 인해 실제로 원격 rsync를 실행하지 않기 때문입니다."[[ -d $target_dir ]]"
12 Error in rsync protocol data stream
이 작업을 수행하려면 TCP 소켓을 사용해야 하므로 속도가 느려질 수 있습니다.
또 다른 옵션은 다음 /etc/crontab
과 같은 것입니다(스크립트 필요 없음).
50 23 * * * root (src_dir="/test/src_dir"; target_dir="/test/target_dir"; [ -d $src_dir ] && [ -d $target_dir ] && rsync -a -v --delete ${src_dir}/ ${target_dir}/) &>> /var/log/test.log