This lesson is only available in Korean for now.
Lesson 19 of 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 Runs on my virtual Ubuntu server
풀기 전에 목록으로 확인 — 진짜 들어 있나?
bash Runs on my virtual Ubuntu server

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

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

사고 발생 — 파일이 사라졌습니다
bash Runs on my virtual Ubuntu server
백업에서 복원 — 돌아왔습니다
bash Runs on my virtual Ubuntu server

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

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

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

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

🎮 크론 실험실

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

크론 실험실 — 표현식과 실행 시각을 오가며
Loading…

등록하기

지금 등록된 것 보기 — 아직 없습니다
bash Runs on my virtual Ubuntu server
편집 창이 뜹니다. 아래 줄을 넣고 Ctrl+O → Ctrl+X 하세요
bash Runs on my virtual Ubuntu server
0 3 * * * /home/jit/backup.sh >> /home/jit/backup.log 2>&1

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

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

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

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

아래 내용으로 고쳐 보세요
bash Runs on my virtual Ubuntu server
#!/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 Runs on my virtual Ubuntu server
🤔 Check yourself
tar -czf backup.tar.gz shop/ 에서 각 옵션의 뜻이 바르게 짝지어진 것은?
🤔 Check yourself
30 2 * * 1 은 언제 실행되는가?
🤔 Check yourself
cron 에 등록한 백업이 몇 달째 실패하고 있었는데 아무도 몰랐습니다. 가장 큰 원인은?