크론(cron)으로 자동 백업 설정하는 방법
서버 운영에서 백업은 선택이 아닌 필수다. 실수, 시스템 장애, 해킹 등의 상황에 대비해 주기적인 자동 백업을 설정해두는 것은 서버 관리의 기본이다. 리눅스에서는 cron이라는 스케줄러를 이용해 특정 시간마다 자동으로 명령어를 실행할 수 있다. 이 글에서는 cron을 활용해 서버 파일이나 데이터베이스를 주기적으로 백업하는 방법을 설명한다.
1. cron이란?
cron은 유닉스 및 리눅스 시스템에서 정해진 시간마다 작업을 자동 실행할 수 있게 해주는 백그라운드 서비스다. 주기적인 명령 실행, 스크립트 수행, 로그 정리, 백업 등에 활용된다.
2. crontab 기본 명령어
현재 사용자 기준의 작업 스케줄을 설정할 때는 다음 명령어를 사용한다.
crontab -e
설정된 작업을 확인하려면:
crontab -l
모든 사용자(시스템 전체)의 크론 작업은 /etc/crontab 또는 /etc/cron.d/ 경로에 있다.
3. 시간 설정 형식
crontab의 시간 설정은 다음과 같은 5자리 형식으로 구성된다.
분 시 일 월 요일 명령어
예시:
- 매일 오전 2시에 실행 → 0 2 * * *
- 매주 일요일 자정에 실행 → 0 0 * * 0
- 매시간 30분마다 실행 → 30 * * * *
4. 파일 백업 자동화 예제
홈 디렉터리 안의 특정 폴더를 백업해 /backup 폴더에 날짜별로 저장하는 스크립트를 작성한다.
백업 스크립트 작성:
nano ~/backup.sh
내용:
#!/bin/bash
today=$(date +%Y-%m-%d)
tar -czf /backup/backup-$today.tar.gz /home/ubuntu/myfolder
스크립트에 실행 권한 부여:
chmod +x ~/backup.sh
크론에 등록 (매일 새벽 3시에 실행):
crontab -e
추가:
0 3 * * * /home/ubuntu/backup.sh
5. MySQL 데이터베이스 백업 예제
MySQL 데이터베이스를 .sql 파일로 백업하는 스크립트를 만든다.
스크립트 내용:
#!/bin/bash
today=$(date +%Y-%m-%d)
mysqldump -u root -p비밀번호 데이터베이스명 > /backup/db-$today.sql
보안을 위해 비밀번호는 .my.cnf 파일에 저장해두고 비밀번호 없이 실행하는 방법도 있다.
6. 로그 저장 및 오류 확인
크론 작업에서 발생한 출력이나 에러는 메일로 전달되거나 자동으로 로그 파일에 저장되도록 설정할 수 있다.
예:
0 3 * * * /home/ubuntu/backup.sh >> /var/log/backup.log 2>&1
7. 주의사항
- 스크립트 안에 사용하는 명령어 경로는 절대경로를 사용하는 것이 좋다 (/usr/bin/tar 등)
- cron에서 실행되는 환경은 일반 셸 환경과 다르기 때문에 필요한 경로를 명시하거나 환경 변수를 직접 설정해야 한다
- 외부 저장소(NFS, Google Drive 등)로의 연동도 가능하지만, 마운트 상태 확인 등을 추가적으로 고려해야 한다
마무리
cron을 이용한 자동 백업은 서버 안정성과 데이터 복구를 위한 가장 기본적이면서도 강력한 수단이다. 정기적으로 실행되는 스크립트를 구성해두면, 관리자의 실수나 예기치 못한 장애로부터 중요한 데이터를 보호할 수 있다. 초기 설정이 조금 번거로울 수 있지만, 한번 구축해두면 꾸준하고 안정적으로 작동하기 때문에 반드시 적용해볼 만한 기능이다.