[리눅스 서버 관리] 크론탭(Crontab)을 활용한 주기적 백업 자동화 스크립트 완벽 가이드

    서버를 운영하다 보면 랜섬웨어 감염, 관리자의 실수(rm -rf), 하드웨어 고장 등 예측할 수 없는 재난 상황에 직면하게 됩니다. 이때 수년간 쌓아온 웹사이트의 데이터와 고객 정보를 살려낼 수 있는 유일한 생명줄은 바로 **’백업(Backup)’**입니다.

    하지만 매일 수동으로 백업을 진행하는 것은 현실적으로 불가능에 가깝습니다. 결국 사람이 하는 일은 언젠가 잊어버리기 마련이니까요. 구글 애드센스 승인을 노리는 기술 블로거나 실무를 막 시작한 주니어 엔지니어를 위해, 리눅스의 강력한 스케줄러인 크론탭(Crontab)과 쉘 스크립트(Shell Script)를 활용하여 서버 백업을 100% 자동화하는 방법을 기초부터 실전까지 상세히 알려드립니다.


    1. 백업 자동화의 핵심, 쉘 스크립트(Shell Script) 작성하기

    자동화를 위해서는 먼저 “무엇을, 어디에, 어떻게 압축해서 저장할 것인지”를 리눅스에게 알려주는 작업 지시서가 필요합니다. 이 지시서가 바로 쉘 스크립트입니다.

    우선 백업 파일을 보관할 안전한 디렉토리를 하나 생성하고, 그 안에 스크립트 파일을 만들어 보겠습니다. (여기서는 /backup 폴더를 예시로 사용합니다.)

    Bash

    # 1. 백업용 디렉토리 생성
    sudo mkdir -p /backup
    
    # 2. 쉘 스크립트 파일 생성
    sudo nano /backup/auto_backup.sh
    

    에디터(nano)가 열리면 아래의 코드를 그대로 복사하여 붙여넣고, 자신의 환경에 맞게 경로를 수정해 줍니다.

    [백업 스크립트 코드]

    Bash

    #!/bin/bash
    
    # 1. 환경 변수 설정
    BACKUP_DIR="/backup"                        # 백업 파일이 저장될 위치
    SOURCE_DIR="/var/www/html"                  # 백업할 원본 데이터 위치 (예: 웹서버 디렉토리)
    DATE=$(date +%Y%m%d_%H%M%S)                 # 파일명에 붙일 현재 날짜와 시간 (예: 20260410_030000)
    
    # 2. 압축 백업 실행 (tar 명령어 활용)
    echo "[$DATE] 백업을 시작합니다..."
    tar -czvf $BACKUP_DIR/backup_$DATE.tar.gz $SOURCE_DIR
    
    # 3. 오래된 백업 파일 자동 삭제 (용량 확보)
    # 7일이 지난 .tar.gz 파일만 찾아서 자동으로 삭제합니다.
    find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -delete
    
    echo "[$DATE] 백업 및 오래된 파일 정리가 완료되었습니다."
    
    • 코드 핵심 포인트: 이전 포스팅에서 다루었던 ‘디스크 용량 가득 참(Disk Full)’ 에러를 방지하기 위해, find 명령어로 7일이 지난 과거의 백업 파일은 스스로 삭제하도록 설정한 부분이 이 스크립트의 핵심 꿀팁입니다.

    파일을 저장(Ctrl+O, Enter, Ctrl+X)하고 빠져나온 뒤, 이 스크립트가 실행될 수 있도록 실행 권한을 부여합니다.

    Bash

    sudo chmod +x /backup/auto_backup.sh
    

    2. 리눅스의 시계, 크론탭(Crontab) 이해하기

    스크립트가 준비되었으니, 이제 “언제” 실행할지 시간을 예약해야 합니다. 리눅스에서는 이 예약 작업을 **크론탭(Crontab)**이라는 데몬이 담당합니다.

    크론탭은 총 5개의 별표(*)로 시간을 표기하며, 왼쪽부터 순서대로 **[분] [시] [일] [월] [요일]**을 의미합니다.

    • * * * * * : 매분 실행
    • 0 3 * * * : 매일 새벽 3시 0분에 실행
    • 0 3 * * 0 : 매주 일요일 새벽 3시 0분에 실행
    • 30 2 1 * * : 매월 1일 새벽 2시 30분에 실행

    서버에 방문자가 가장 적은 시간대인 새벽 3~4시경에 백업 스케줄을 잡는 것이 서비스에 영향을 주지 않는 가장 좋은 방법입니다.

    3. 실전! 매일 새벽 3시 자동 백업 스케줄링 등록

    이제 작성한 쉘 스크립트를 크론탭에 등록해 보겠습니다. 최고 관리자 권한으로 시스템 백업을 수행해야 하므로 sudo를 붙여 크론탭을 엽니다.

    Bash

    sudo crontab -e
    

    (처음 실행하면 어떤 에디터를 사용할지 묻는데, 1번을 눌러 익숙한 nano 에디터를 선택하시면 됩니다.)

    문서의 가장 맨 아랫줄로 이동하여 다음과 같이 백업 스케줄을 추가합니다.

    [크론탭 등록 내용]

    Bash

    0 3 * * * /backup/auto_backup.sh >> /backup/backup_log.txt 2>&1
    
    • 문법 해설: * 0 3 * * * : 매일 새벽 3시 정각에
      • /backup/auto_backup.sh : 이 스크립트를 실행해라.
      • >> /backup/backup_log.txt : 스크립트 실행 시 화면에 나오는 결과(성공 여부 등)를 backup_log.txt 파일에 텍스트로 차곡차곡 누적해서 저장해라.
      • 2>&1 : 정상적인 출력 메시지뿐만 아니라, 발생한 에러(표준 에러) 메시지까지 모두 로그 파일에 함께 기록해라. (에러 추적을 위한 필수 옵션입니다.)

    작성을 마쳤다면 저장하고 빠져나옵니다. 화면에 crontab: installing new crontab이라는 메시지가 뜬다면 성공적으로 예약이 완료된 것입니다.

    4. 크론탭 서비스 재시작 및 상태 확인

    설정이 잘 적용되었는지 크론탭 데몬(서비스)을 재시작해 줍니다. 우분투 환경 기준 명령어는 다음과 같습니다.

    Bash

    sudo systemctl restart cron
    sudo systemctl status cron
    

    상태 창에 초록색 불빛과 함께 active (running)이라고 표시된다면, 이제 당신의 서버는 365일 지치지 않고 매일 새벽 스스로 데이터를 안전하게 포장해 두는 스마트한 상태가 되었습니다.


    결론: 자동화 세팅 후에도 ‘복구 테스트’는 필수입니다

    축하합니다! 크론탭과 쉘 스크립트를 활용하여 완벽한 서버 백업 자동화 시스템을 구축하셨습니다. 이제 여러분은 서버 장애에 대한 두려움을 덜고 편안하게 숙면을 취하실 수 있습니다.

    하지만 진정한 서버 관리자라면 여기서 끝내서는 안 됩니다. 백업 파일이 그저 껍데기뿐인 0바이트 파일은 아닌지, **실제로 압축을 풀었을 때 데이터가 완벽하게 복원되는지 최소 한 달에 한 번은 수동으로 ‘복구(Restore) 테스트’**를 진행해야 합니다. 백업의 진정한 완성은 ‘저장’이 아니라 ‘성공적인 복구’에 있다는 사실을 반드시 명심하시기 바랍니다.

    답글 남기기

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

    광고보고 콘텐츠 계속 읽기
    원치않으시면 뒤로가기를 해주세요

    광고 차단 알림

    광고 클릭 제한을 초과하여 광고가 차단되었습니다.

    단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.

    광고보고 콘텐츠 계속 읽기
    원치않으시면 뒤로가기를 해주세요