리눅스에서 매일 자동 백업 + 로그 남기기 (초보자 실습)
아래는 howinfo.kr에 바로 올릴 수 있게 비전공자도 따라하는 “crontab 백업 자동화” 글로 상세하게 정리한 완성본입니다. (복붙 위주)
⏰ crontab으로 백업 자동화 만들기
리눅스에서 매일 자동 백업 + 로그 남기기 (초보자 실습)

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)