19강 / 20강

백업과 cron — 잊어버려도 되게 만들기

tar 로 묶고, 매일 새벽 3시에 저절로

백업과 cron — 잊어버려도 되게 만들기
백업은 있는 것이 아니라 되살려 본 것입니다.

서버 관리에서 가장 중요한 한 가지를 고르라면, 많은 사람이 이걸 꼽습니다. 백업.

디스크는 고장 납니다. 손가락은 미끄러집니다. 공격자는 파일을 지웁니다. 그때 여러분을 구하는 것은 실력이 아니라 어제 만들어 둔 백업입니다.

tar — 여러 파일을 하나로 묶기

이름은 Tape Archive의 줄임말입니다. 자기테이프에 백업하던 시절의 이름이에요. 옵션 글자가 많아 어려워 보이지만, 두 조합만 외우면 됩니다.

-c만들기create
-x풀기extract
-t목록만 보기list — 풀기 전 확인용
-z압축gzip 으로 (.tar.gz)
-f파일 이름 지정항상 맨 끝에 옵니다
-v진행 상황 보이기verbose
묶을 때 :  tar -czf 백업.tar.gz 폴더/
풀 때   :  tar -xzf 백업.tar.gz
확인할 때: tar -tzf 백업.tar.gz
쇼핑몰을 통째로 묶습니다
bash 내 가상 Ubuntu 서버에서 실행
풀기 전에 목록으로 확인 — 진짜 들어 있나?
bash 내 가상 Ubuntu 서버에서 실행

복원 연습 — 백업의 진짜 시험

실제로 파일을 지우고, 백업에서 되살려 봅시다. 이걸 해 봐야 백업입니다.

사고 발생 — 파일이 사라졌습니다
bash 내 가상 Ubuntu 서버에서 실행
백업에서 복원 — 돌아왔습니다
bash 내 가상 Ubuntu 서버에서 실행

cron — 컴퓨터에게 알람 맞춰 주기

백업을 매일 손으로 하면 언젠가 잊습니다. cron 은 정해진 시각에 명령을 자동으로 실행해 주는 시계예요. 1970년대부터 있던 기능인데 여전히 서버의 심장 박동입니다.

  ┌───── 분   (0-59)
  │ ┌─── 시   (0-23)
  │ │ ┌─ 일   (1-31)
  │ │ │ ┌─ 월  (1-12)
  │ │ │ │ ┌─ 요일 (0-7, 0과 7은 일요일)
  │ │ │ │ │
  0 3 * * *   /home/jit/backup.sh

이 줄은 매일 새벽 3시 0분에 백업 스크립트를 실행하라는 뜻입니다. * 는 "아무 때나 전부"라는 뜻이에요.

🎮 크론 실험실

표현식을 만들어 보고 언제 실행되는지 즉시 확인해 보세요. 반대로 "매주 월요일 오전 9시" 같은 요구를 표현식으로 바꾸는 연습도 있습니다.

크론 실험실 — 표현식과 실행 시각을 오가며
불러오는 중…

등록하기

지금 등록된 것 보기 — 아직 없습니다
bash 내 가상 Ubuntu 서버에서 실행
편집 창이 뜹니다. 아래 줄을 넣고 Ctrl+O → Ctrl+X 하세요
bash 내 가상 Ubuntu 서버에서 실행
0 3 * * * /home/jit/backup.sh >> /home/jit/backup.log 2>&1

뒤에 붙은 것들의 뜻입니다.

>> backup.log결과를 기록에 이어 붙임나중에 성공했는지 확인 가능
2>&1오류도 같은 파일로2번(오류)을 1번(출력)과 같은 곳으로
등록되었는지 확인
bash 내 가상 Ubuntu 서버에서 실행

백업 스크립트를 제대로 만들기

11강에서 만든 것을 실전용으로 다듬어 봅시다. 날짜별로 저장하고 오래된 것은 지웁니다.

아래 내용으로 고쳐 보세요
bash 내 가상 Ubuntu 서버에서 실행
#!/bin/bash
# 쇼핑몰 백업 — 매일 새벽 3시 cron 이 실행

SRC=/home/jit/shop
DEST=/home/jit/backups
DATE=$(date +%Y%m%d)
FILE="$DEST/shop-$DATE.tar.gz"

mkdir -p "$DEST"

if tar -czf "$FILE" "$SRC"; then
  echo "[$(date)] 백업 성공: $FILE"
else
  echo "[$(date)] 백업 실패!"
  exit 1
fi

# 7일보다 오래된 백업은 지운다 (디스크가 차지 않게)
find "$DEST" -name "shop-*.tar.gz" -type f | sort | head -n -7 | while read OLD
do
  echo "오래된 백업 삭제: $OLD"
done

if tar …; then 을 보세요. 11강의 조건문입니다. 명령이 성공했는지 실패했는지로 갈라집니다. 성공하면 0, 실패하면 0이 아닌 값을 돌려주는 것이 리눅스의 약속이에요.

직접 돌려서 되는지 확인 — cron 에 맡기기 전에 반드시
bash 내 가상 Ubuntu 서버에서 실행
🤔 확인 문제
tar -czf backup.tar.gz shop/ 에서 각 옵션의 뜻이 바르게 짝지어진 것은?
🤔 확인 문제
30 2 * * 1 은 언제 실행되는가?
🤔 확인 문제
cron 에 등록한 백업이 몇 달째 실패하고 있었는데 아무도 몰랐습니다. 가장 큰 원인은?