리눅스에서 매일 자동 백업 + 로그 남기기 (초보자 실습)

아래는 howinfo.kr에 바로 올릴 수 있게 비전공자도 따라하는 “crontab 백업 자동화” 글로 상세하게 정리한 완성본입니다. (복붙 위주)


⏰ crontab으로 백업 자동화 만들기

리눅스에서 매일 자동 백업 + 로그 남기기 (초보자 실습)

https://miro.medium.com/1%2AiPXS6566yuSmCLA-LFgCaw.jpeg

1) 왜 백업 자동화가 필요할까?

서버나 NAS를 운영하다 보면 이런 일이 생깁니다.

  • 실수로 파일 삭제
  • 업데이트 후 사이트 오류
  • 디스크 문제로 데이터 손상
  • 랜섬웨어 같은 악성 이슈

백업은 “한 번 해두면 끝”이 아니라,
꾸준히 자동으로 돌아가야 의미가 있습니다.

그래서 오늘 목표는 딱 이겁니다.

매일 새벽 자동 백업
백업 결과를 로그로 저장
실패하면 바로 알 수 있게 구조 만들기


2) crontab이 뭔가요? (아주 쉽게)

crontab은 리눅스에 기본으로 들어있는 “예약 실행” 도구입니다.

“매일 03:00에 이 명령 실행해줘”
“매주 일요일에 이 스크립트 실행해줘”

이걸 자동으로 해줍니다.


실습 준비 (권장 구성)

이번 글은 가장 흔한 백업 방식으로 진행합니다.

  • 백업 대상: /home, /var/www 같은 폴더
  • 백업 저장소: /backup 폴더(외장하드, NAS 공유폴더도 가능)
  • 백업 도구: rsync (빠르고 안정적)

3) 백업 폴더 만들기

sudo mkdir -p /backup
sudo mkdir -p /backup/log
sudo chmod 755 /backup

4) 백업 스크립트 만들기 (복붙)

backup.sh 파일을 만들겠습니다.

sudo nano /usr/local/bin/backup.sh

아래 내용을 그대로 붙여 넣으세요.

#!/bin/bash
set -e

# ===== 설정 =====
BACKUP_SRC="/var/www /etc"
BACKUP_DST="/backup/daily"
LOG_DIR="/backup/log"
DATE=$(date +"%Y-%m-%d_%H%M%S")
LOG_FILE="$LOG_DIR/backup_$DATE.log"
# ===============

mkdir -p "$BACKUP_DST"
mkdir -p "$LOG_DIR"

echo "===== 백업 시작: $DATE =====" | tee -a "$LOG_FILE"
echo "대상: $BACKUP_SRC" | tee -a "$LOG_FILE"
echo "저장: $BACKUP_DST" | tee -a "$LOG_FILE"

# rsync 옵션 설명
# -a : 권한/시간 포함 그대로 복사
# -v : 진행 로그 출력
# --delete : 원본에 없는 파일은 백업본에서도 제거(동기화 목적)
rsync -av --delete $BACKUP_SRC "$BACKUP_DST" | tee -a "$LOG_FILE"

echo "===== 백업 완료: $DATE =====" | tee -a "$LOG_FILE"

저장 후 권한 부여:

sudo chmod +x /usr/local/bin/backup.sh

5) 백업이 잘 되는지 수동 테스트

sudo /usr/local/bin/backup.sh

정상이라면:

  • /backup/daily에 파일이 생기고
  • /backup/log에 로그 파일이 생깁니다.

6) crontab 등록 (자동 실행)

6-1) root 크론 편집

보통 백업은 권한 문제가 생길 수 있어서 root로 실행하는 게 편합니다.

sudo crontab -e

6-2) 매일 새벽 3시에 실행

맨 아래 줄에 추가:

0 3 * * * /usr/local/bin/backup.sh

저장하면 끝입니다.


7) 크론이 실제로 돌았는지 확인하는 법

방법 1) 로그 파일 확인

ls -al /backup/log | tail

방법 2) 시스템 크론 로그 확인(배포판마다 다름)

Ubuntu 계열은 보통:

grep CRON /var/log/syslog | tail -n 30

8) 백업을 “쓸만하게” 만드는 업그레이드 3가지

8-1) 날짜별로 백업 보관하기 (버전 보관)

단순 동기화는 “최근 상태”만 남습니다.
실전에서는 날짜별로 남기는 게 좋습니다.

예: /backup/daily/2026-02-13/

스크립트에서 BACKUP_DST를 이렇게 변경:

BACKUP_DST="/backup/daily/$(date +%Y-%m-%d)"

8-2) 오래된 백업 자동 삭제 (30일만 보관)

매일 쌓이면 용량이 금방 찹니다.

find /backup/daily -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;

이 명령을 백업 스크립트 마지막에 추가하면 됩니다.


8-3) 백업 실패 시 알림 보내기(선택)

앞서 만든 “시놀로지 챗 알림” 스크립트와 연결하면
백업 실패 시 자동 알림까지 완성됩니다.

(원하시면 이 부분도 바로 붙여드릴게요)


9) 자주 하는 실수 / 주의사항

⚠ 1) 백업 대상 경로 오타

/var/www/var/ww처럼 잘못 쓰면 아무것도 안 백업됩니다.

⚠ 2) –delete 옵션 주의

동기화 목적이라면 편하지만
실수 삭제도 같이 반영됩니다.

👉 “버전 백업(날짜 폴더)”을 추천하는 이유입니다.

⚠ 3) 백업 저장소가 같은 디스크면 의미가 줄어듦

가능하면:

  • 외장 HDD
  • 다른 NAS
  • 원격 서버
    같은 “다른 장소”에 두는 게 안전합니다.

✅ 체크리스트

  • /backup 폴더 생성
  • backup.sh 수동 실행 성공
  • /backup/log에 로그 파일 생성
  • sudo crontab -e에 등록 완료
  • 다음날 로그 확인 완료

❓ FAQ

Q1. crontab 시간을 바꾸려면?

예: 매일 01:30 실행

30 1 * * * /usr/local/bin/backup.sh

Q2. 특정 요일만 실행할 수 있나요?

예: 월~금만 새벽 3시

0 3 * * 1-5 /usr/local/bin/backup.sh

Q3. 크론이 안 돌아요

  • 경로를 절대경로로 썼는지 확인 (/usr/local/bin/backup.sh)
  • 실행 권한 있는지 확인 (chmod +x)
  • 로그 확인 (/var/log/syslog)

이 글이 도움이 되었나요?좋아요/추천은 다시 누르면 취소됩니다.
hong
발행: 2026.02.13 최종 검토: 2026.02.13

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다