19강 / 20강
백업과 cron — 잊어버려도 되게 만들기
tar 로 묶고, 매일 새벽 3시에 저절로
서버 관리에서 가장 중요한 한 가지를 고르라면, 많은 사람이 이걸 꼽습니다. 백업.
디스크는 고장 납니다. 손가락은 미끄러집니다. 공격자는 파일을 지웁니다. 그때 여러분을 구하는 것은 실력이 아니라 어제 만들어 둔 백업입니다.
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/ 에서 각 옵션의 뜻이 바르게 짝지어진 것은?해설 create · gzip · file 입니다. 풀 때는 c 대신 extract 의 x 를 씁니다.
-f 는 항상 맨 끝에 두고 바로 뒤에 파일 이름을 씁니다.🤔 확인 문제
30 2 * * 1 은 언제 실행되는가?해설 순서는 분 시 일 월 요일 입니다. 마지막
1 이 요일이고 월요일을 뜻해요(0과 7은 일요일). 일·월이 * 이므로 요일 조건만 적용됩니다.🤔 확인 문제
cron 에 등록한 백업이 몇 달째 실패하고 있었는데 아무도 몰랐습니다. 가장 큰 원인은?
해설
>> /home/jit/backup.log 2>&1 로 결과와 오류를 모두 남겨야 합니다. 자동화의 핵심은 실행이 아니라 확인 가능성입니다.