이전 글목록 보기다음 글
linux•2026-10-02T03:34:25.529Z

crontab -e

Anya2_Forger profileAnya2_Forger
kernellinux-1024x628.jpg

물론입니다. 이 명령은 매일 새벽 5시에 backup01 디렉터리를 USB 백업 디스크로 rsync 백업하고, 시작/종료 결과를 로그 파일에 기록하는 cron 작업입니다.

전체를 먼저 보면:

0 5 * * * echo "=== $(date) rsync start ===" >> /home/blogs80/rsync-backup01.log; /usr/bin/rsync -av --delete /home/blogs80/backup01 /mnt/usb-gitbackup/ >> /home/blogs80/rsync-backup01.log 2>&1; echo "=== $(date) rsync end: $? ===" >> /home/blogs80/rsync-backup01.log

1. 0 5 * * *

0 5 * * *

cron의 실행 시간을 의미합니다.

위치

의미

값

1번째

분

0

2번째

시

5

3번째

일

*

4번째

월

*

5번째

요일

*

따라서:

매일 오전 5시 00분에 실행

됩니다.


2. 백업 시작 기록

echo "=== $(date) rsync start ===" >> /home/blogs80/rsync-backup01.log

echo

문자열을 출력합니다.

예를 들어:

=== Fri Oct  2 05:00:00 KST 2026 rsync start ===

같은 내용이 만들어집니다.

$(date)

$(date)

는 현재 날짜와 시간을 가져오는 명령 치환입니다.

예:

date

실행 결과가

Fri Oct  2 05:00:00 KST 2026

라면,

echo "=== $(date) rsync start ==="

는

=== Fri Oct  2 05:00:00 KST 2026 rsync start ===

가 됩니다.

>>

>> /home/blogs80/rsync-backup01.log

는 로그 파일의 맨 뒤에 추가하라는 뜻입니다.

중요한 점은 >와 다릅니다.

> file

→ 기존 내용을 지우고 새로 작성

>> file

→ 기존 내용은 유지하고 뒤에 추가

따라서 매일 백업할 때마다 로그가 계속 쌓입니다.


3. 실제 rsync 백업

핵심 부분입니다.

/usr/bin/rsync -av --delete /home/blogs80/backup01 /mnt/usb-gitbackup/

의미는:

/home/blogs80/backup01의 내용을 /mnt/usb-gitbackup/에 동기화한다.

입니다.


4. /usr/bin/rsync

/usr/bin/rsync

rsync 프로그램을 실행합니다.

cron에서는 일반 터미널보다 환경변수가 제한될 수 있기 때문에:

rsync

보다는

/usr/bin/rsync

처럼 실행 파일의 정확한 위치를 지정하는 것이 안전합니다.

현재 서버에서 다음으로 확인할 수 있습니다.

which rsync

보통:

/usr/bin/rsync

가 나옵니다.


5. -a

-a

는 archive mode입니다.

백업에서 매우 많이 사용하는 옵션입니다.

대략적으로 다음과 같은 속성을 보존하면서 복사합니다.

  • 디렉터리 구조

  • 파일 권한

  • 소유자/그룹

  • 수정 시간

  • 심볼릭 링크

  • 파일 등을 재귀적으로 복사

즉 단순히 파일만 복사하는 것보다 원본의 구조와 속성을 최대한 유지하면서 동기화합니다.


6. -v

-v

는 verbose입니다.

rsync가 무엇을 하고 있는지 자세히 출력합니다.

예를 들어:

sending incremental file list
README.md
src/app.js
src/config.js

sent 12,345 bytes
received 234 bytes
total size is 1,234,567

같은 정보가 출력됩니다.

그리고 이 출력은 뒤에서 설명할 >> ...log 때문에 로그 파일에 저장됩니다.


7. --delete

이 옵션은 특히 주의해야 합니다.

--delete

는 원본에는 없어진 파일을 백업 쪽에서도 삭제합니다.

예를 들어 원래:

backup01/
├── a.txt
├── b.txt
└── c.txt

였고 USB에도:

gitbackup/
├── a.txt
├── b.txt
└── c.txt

가 있다고 하겠습니다.

그런데 원본에서:

c.txt

를 삭제했습니다.

다음날 rsync를 실행하면:

backup01/
├── a.txt
└── b.txt

USB도:

gitbackup/
├── a.txt
└── b.txt

가 됩니다.

즉:

USB 백업을 원본과 똑같은 상태로 유지하는 옵션

입니다.

다만 이것은 버전 백업이 아닙니다.

예를 들어 실수로 원본에서 중요한 파일을 삭제하면:

rsync --delete

가 다음 백업 때 USB에서도 그 파일을 삭제할 수 있습니다.

따라서 이것은:

"현재 상태의 미러링 백업"

에 가깝습니다.


8. 원본과 목적지

/home/blogs80/backup01

가 원본입니다.

/mnt/usb-gitbackup/

가 USB 백업 위치입니다.

따라서 개념적으로:

서버
/home/blogs80/backup01
        │
        │ rsync
        ▼
USB
/mnt/usb-gitbackup/

입니다.


9. rsync 결과를 로그에 저장

뒤의:

>> /home/blogs80/rsync-backup01.log 2>&1

도 중요합니다.

>>

rsync의 **정상 출력(stdout)**을 로그 파일 뒤에 추가합니다.

>> /home/blogs80/rsync-backup01.log

2>&1

이 부분은 초보자에게 조금 헷갈릴 수 있습니다.

Linux에는 기본적으로 출력 통로가 두 개 있습니다.

1 = 정상 출력(stdout)
2 = 오류 출력(stderr)

따라서:

2>&1

은:

오류 출력(2)을 정상 출력(1)이 가는 곳으로 보내라.

라는 뜻입니다.

결과적으로:

>> /home/blogs80/rsync-backup01.log 2>&1

는

rsync의 정상 메시지와 오류 메시지를 모두 rsync-backup01.log에 기록

하게 됩니다.


10. rsync가 끝난 뒤 종료 코드 기록

마지막 부분입니다.

echo "=== $(date) rsync end: $? ===" >> /home/blogs80/rsync-backup01.log

여기서 중요한 것이:

$?

입니다.

$?는 **바로 직전에 실행된 명령의 종료 코드(exit status)**입니다.

일반적으로:

0

이면 성공입니다.

0이 아닌 값이면 문제가 발생했다는 의미입니다.

따라서 예를 들어 성공하면:

=== Fri Oct  2 05:00:15 KST 2026 rsync end: 0 ===

처럼 기록될 수 있습니다.

실패하면:

=== Fri Oct  2 05:00:15 KST 2026 rsync end: 23 ===

같이 나올 수 있습니다.


11. ;의 의미

전체 명령에는 세 개의 작업이 있습니다.

echo "start"...;
rsync ...;
echo "end..."

여기서:

;

는

앞의 명령이 끝나면 다음 명령을 실행하라

는 의미입니다.

중요한 것은 앞 명령이 실패해도 다음 명령을 실행한다는 점입니다.

예를 들어 rsync가 실패해도:

echo "=== ... rsync end: $? ==="

가 실행됩니다.

그래서 실패한 경우에도 종료 코드를 로그에 남길 수 있습니다.


12. 실제로 로그에는 어떻게 보일까?

예를 들어 정상적으로 백업되었다면:

=== Fri Oct  2 05:00:00 KST 2026 rsync start ===
sending incremental file list
...
sent 12,345 bytes
received 234 bytes
total size is 123,456,789
=== Fri Oct  2 05:00:08 KST 2026 rsync end: 0 ===

다음날 또 실행되면 기존 로그를 삭제하지 않고 뒤에 추가됩니다.

=== Fri Oct  2 05:00:00 KST 2026 rsync start ===
...
=== Fri Oct  2 05:00:08 KST 2026 rsync end: 0 ===
=== Sat Oct  3 05:00:00 KST 2026 rsync start ===
...
=== Sat Oct  3 05:00:03 KST 2026 rsync end: 0 ===

전체를 아주 간단하게 해석하면

이 한 줄은 사실 다음과 같은 작업입니다.

매일 오전 5시
    ↓
"백업 시작"을 로그에 기록
    ↓
/home/blogs80/backup01
    ↓
rsync로
    ↓
/mnt/usb-gitbackup/
    ↓
정상 출력 + 오류를 로그에 기록
    ↓
백업이 끝나면 종료 코드 기록

즉 사용하시는 서버 환경에서는 backup01를 USB에 매일 자동으로 동기화하고, 나중에 로그를 확인해서 백업 성공 여부를 확인하기 위한 cron 작업이라고 보면 됩니다.

한 가지 특히 기억하실 점

현재 명령의:

--delete

때문에 이것은 **"삭제된 파일도 보존하는 백업"이 아니라 "원본과 USB를 똑같이 맞추는 백업"**입니다.

따라서 Git 저장소 자체를 USB에 보존하는 목적이라면 괜찮지만, 실수로 파일이나 저장소를 삭제했을 때 복구할 수 있는 이력형 백업을 원한다면 별도의 방법을 사용하는 것이 좋습니다.

Comments

Log in to comment

Loading comments...
이전 글목록 보기다음 글

당신의 이야기를 기다리고 있습니다