# Copy backups to another server with rsync and cron

**URL:** <https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346>\
**Category:** Sysadmins\
**Tags:** how-to\
**Created:** [7월 30, 2019, 1:17오전 UTC](https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346 "2019-07-30T01:17:44Z")\
**Posts on this page:** 1\
**Showing post:** 8

<div class="post-metadata">

**Author:** ![Bathinda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/bathinda/32/135888_2.png) [@Bathinda](https://meta.discourse.org/u/Bathinda)\
**Post date:** [8월 29, 2024, 11:33오전 UTC](https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346/8 "2024-08-29T11:33:30Z")

</div>

> [@johncs](#):
>
> ```plaintext
> #!/usr/bin/env bash
> 
> set -xe
> 
> HOST="$1"
> DIR="$2"
> if [-z "$HOST"] || [! -d "$DIR"]; then
> echo "$0 HOST DIR"
> exit 1
> fi
> 
> # --ignore-existing는 이미 복사된 백업을 rsync가 무시하도록 합니다.
> # --delay-updates는 $DIR에 완전한 백업만 저장되도록 보장합니다.
> # 이 옵션이 지정되지 않으면 $DIR에 부분적인 백업이 저장될 수 있으며,
> # --ignore-existing은 동등성 검사를 수행하지 않으므로 이 문제는
> # 수정되거나 감지되지 않을 것입니다.
> rsync --ignore-existing --delay-updates "$HOST:/var/discourse/shared/standalone/backups/default/*" "$DIR"
> 
> ```

나처럼 이 스레드에 온 분들을 위해, 이 토픽의 첫 번째 게시물을 조금 더 자세히 설명해 드리겠습니다.

- 이는 bash 스크립트이며, 확장자가 `.sh`인 아무 이름이나 가진 파일에 그대로 붙여넣을 수 있습니다.
- 스크립트의 첫 번째 줄은 스크립트가 실행되는 환경을 설정하며, 어떤 셸 또는 환경이 사용되어야 하는지 지정합니다: **`#!/usr/bin/env bash`** : 이는 시스템에 `env` 명령을 통해 찾은 `bash` 인터프리터를 사용하도록 지시합니다.
- **플래그 (`set -xe`)**:
  - `-x`: 디버깅을 활성화하여 명령이 실행되기 전에 각 명령과 그 인수가 터미널에 출력되도록 합니다. 이는 스크립트 디버깅에 유용합니다.
  - `-e`: 명령이 0이 아닌 상태(에러를 나타냄)를 반환하면 스크립트가 즉시 종료되도록 합니다. 이는 실패 후 스크립트가 계속 실행되는 것을 방지하는 데 유용합니다.

- 그리고 다음 중요한 단계인 **변수 (`HOST="$1" DIR="$2"`)**:
  - `HOST="$1"`: 스크립트에 전달된 첫 번째 인자(`$1`)를 변수 `HOST`에 할당합니다. 즉, 이 스크립트가 실행될 때 사용자에게 입력을 요구하며, 사용자가 입력한 첫 번째 값($1)이 ‘호스트’ 값(데이터가 복사될 출처)으로 전달/간주됩니다.
  - `DIR="$2"`: 스크립트에 전달된 두 번째 인자(`$2`)를 변수 `DIR`에 할당합니다. 즉, 사용자가 첫 번째 값 입력 후 입력한 값(디렉터리 경로, '$2’라고 함)이 스크립트에 의해 '디렉터리 - 대상 디렉터리’로 받아들여집니다.  
관심 있는 분이 계시다면 나머지 2단계도 설명해 드릴 수 있지만, 다음 단계는 사용자가 프롬프트 시 올바른 호스트와 대상 디렉터리 값을 공급하는지 확인하는 것뿐입니다. 그렇지 않으면 (마지막 단계) 에러 출력으로 `1`을 반환합니다.

제가 반복해서 강조하고 싶은 주요 사항은 이것이 스크립트이며, 실행되면 호스트(데이터가 복사될 출처)와 대상 디렉터리(데이터가 붙여넣을 위치)를 사용자에게 요구한다는 것입니다. 그리고 크론 작업 파일에 _이 파일의 경로_를 포함해야 하며, 크론 파일에 설정한 횟수만큼 하루에 이 스크립트 파일을 여러 번 실행할 수 있습니다.

그러나 제가 이해하지 못한 점은 실제 복사/붙여넣기(또는 백업) 명령어가 어디에 있는가입니다.  
**실제 동기화는 어떻게 발생합니까?**

---

_[View the full topic](https://meta.discourse.org/t/copy-backups-to-another-server-with-rsync-and-cron/124346)._
