728x90
반응형
리눅스 cron 시스템이란?
cron은 리눅스/유닉스 시스템에서 특정 시간이나 간격으로 명령어나 스크립트를 자동으로 실행할 수 있게 해주는 작업 스케줄러입니다. 마치 알람시계처럼 "이 시간에 이 일을 해라"라고 컴퓨터에게 지시하는 도구입니다.
crontab이란?
crontab(cron table)은 cron 작업을 설정하는 설정 파일입니다. 사용자별로 crontab을 가질 수 있으며, 이 파일에 실행할 명령어와 실행 시간을 지정하면 시스템이 자동으로 해당 시간에 명령을 실행합니다.
이미지/파일 자동 삭제를 위한 cron 구성 방법
1. 기본 crontab 사용법
# crontab 편집
crontab -e
# 현재 crontab 목록 보기
crontab -l
2. crontab 형식
crontab 항목은 다음과 같은 형식을 가집니다:
* * * * * 실행할_명령어
↑ ↑ ↑ ↑ ↑
│ │ │ │ └── 요일 (0-7, 0과 7은 일요일)
│ │ │ └──── 월 (1-12)
│ │ └────── 일 (1-31)
│ └──────── 시 (0-23)
└────────── 분 (0-59
3. 이미지/파일 자동 삭제 예제
예제 1: 간단한 파일 삭제 - 30일 이상 된 이미지 삭제
# 매일 새벽 2시에 /var/www/images 디렉토리에서 30일 이상 된 jpg 파일 삭제
0 2 * * * find /var/www/images -name "*.jpg" -type f -mtime +30 -delete
이 명령은:
- 0 2 * * *: 매일 새벽 2시에 실행
- find /var/www/images: /var/www/images 디렉토리에서 검색
- name "*.jpg": jpg 확장자 파일만 대상
- type f: 일반 파일만 선택
- mtime +30: 30일보다 오래된 파일만 선택
- delete: 해당 파일 삭제
예제 2: 로그 파일로 기록하기
# 매주 일요일 새벽 3시에 임시 이미지 디렉토리 정리하고 로그 남기기
0 3 * * 0 find /tmp/uploads -type f -mtime +7 -delete >> /var/log/cleanup.log 2>&1
이 명령은 삭제 작업 결과를 /var/log/cleanup.log 파일에 기록합니다.
예제 3: 특정 패턴의 백업 파일 정리
# 매월 1일 새벽 1시에 백업 디렉토리에서 30일 이상 된 백업 파일 삭제
0 1 1 * * find /backups -name "backup_*.zip" -type f -mtime +30 -delete
4. 실제 활용 가능한 이미지 자동 삭제 스크립트
더 복잡한 조건이나 처리를 위해서는 쉘 스크립트를 작성하고, 그 스크립트를 cron으로 실행하는 것이 좋습니다.
cleanup_images.sh 스크립트:
#!/bin/bash
# 설정 변수
IMAGE_DIR="/var/www/images"
LOG_FILE="/var/log/image_cleanup.log"
RETENTION_DAYS=30
RETENTION_DAYS_ARCHIVED=90
# 로그 함수
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# 스크립트 시작 로그
log_message "이미지 정리 작업 시작"
# 1. 일반 이미지 디렉토리에서 30일 이상 된 파일 삭제
OLD_FILES_COUNT=$(find "$IMAGE_DIR/regular" -type f -mtime +$RETENTION_DAYS | wc -l)
if [ $OLD_FILES_COUNT -gt 0 ]; then
log_message "일반 이미지 디렉토리에서 $OLD_FILES_COUNT개 파일 삭제 예정"
find "$IMAGE_DIR/regular" -type f -mtime +$RETENTION_DAYS -delete
log_message "일반 이미지 삭제 완료"
else
log_message "삭제할 일반 이미지 없음"
fi
# 2. 아카이브 디렉토리에서 90일 이상 된 파일 삭제
ARCHIVED_FILES_COUNT=$(find "$IMAGE_DIR/archive" -type f -mtime +$RETENTION_DAYS_ARCHIVED | wc -l)
if [ $ARCHIVED_FILES_COUNT -gt 0 ]; then
log_message "아카이브 디렉토리에서 $ARCHIVED_FILES_COUNT개 파일 삭제 예정"
find "$IMAGE_DIR/archive" -type f -mtime +$RETENTION_DAYS_ARCHIVED -delete
log_message "아카이브 이미지 삭제 완료"
else
log_message "삭제할 아카이브 이미지 없음"
fi
# 3. 빈 디렉토리 정리
find "$IMAGE_DIR" -type d -empty -delete
log_message "빈 디렉토리 정리 완료"
# 4. 디스크 사용량 보고
DISK_USAGE=$(df -h "$IMAGE_DIR" | tail -n 1)
log_message "현재 디스크 사용량: $DISK_USAGE"
# 스크립트 종료 로그
log_message "이미지 정리 작업 완료"
crontab에 스크립트 등록:
# 실행 권한 부여
chmod +x /path/to/cleanup_images.sh
# crontab에 등록 (매일 새벽 3시 실행)
crontab -e
# 아래 내용 추가
0 3 * * * /path/to/cleanup_images.sh
고급 활용: 조건부 파일 삭제
1. 파일 크기 기준 삭제
# 10MB보다 큰 로그 파일만 30일 후 삭제
0 4 * * * find /var/log -type f -name "*.log" -size +10M -mtime +30 -delete
2. 접근 시간 기준 삭제
# 90일 동안 접근되지 않은 PDF 파일 삭제
0 4 * * * find /data/documents -type f -name "*.pdf" -atime +90 -delete
3. 특정 조건의 임시 파일 삭제
# 썸네일 캐시에서 7일 이상 된 파일 중 특정 접두사를 가진 파일만 삭제
0 5 * * * find /var/cache/thumbnails -type f -name "temp_*" -mtime +7 -delete
안전한 자동 삭제를 위한 팁
- 테스트 먼저 진행: 실제 삭제(delete) 전에 print 옵션으로 어떤 파일이 대상인지 확인
- # 실제 삭제 전 대상 파일 목록 확인 find /var/www/images -name "*.jpg" -type f -mtime +30 -print
- 백업 후 삭제: 중요한 파일의 경우, 삭제 전에 백업 진행
- # 삭제 전 백업 디렉토리로 이동 0 1 * * * find /important/files -mtime +60 -exec mv {} /backup/directory/ \\;
- 로그 남기기: 항상 어떤 작업이 수행되었는지 로그 기록
- # 삭제 작업 로그 기록 0 2 * * * find /var/www/images -mtime +30 -delete >> /var/log/cleanup.log 2>&1
- 단계적 접근: 가장 오래된 파일부터 점진적으로 삭제
- # 365일 이상 된 파일 매일 삭제, 180일 이상은 매주 삭제 0 3 * * * find /data/files -mtime +365 -delete 0 3 * * 0 find /data/files -mtime +180 -mtime -365 -delete
실제 운영 사례: 선거 이미지 관리 시스템
선거 이미지 파일을 관리하는 시스템을 예로 들어보겠습니다:
#!/bin/bash
# 설정
IMAGE_ROOT="/data/election_images"
CURRENT_DATE=$(date +%Y%m%d)
LOG_FILE="/var/log/election_image_cleanup_$CURRENT_DATE.log"
ELECTION_DATE="20240415"# 선거일: 2024년 4월 15일# 로그 시작
echo "===== 선거 이미지 정리 작업 시작: $(date) =====" > "$LOG_FILE"
# 선거일 기준 상대적 날짜 계산
days_since_election=$(( ($(date -d "$CURRENT_DATE" +%s) - $(date -d "$ELECTION_DATE" +%s)) / 86400 ))
echo "선거일 이후 경과일: $days_since_election 일" >> "$LOG_FILE"
# 선거 전 이미지 (캠페인 자료)
if [ $days_since_election -gt 30 ]; then
# 선거 30일 이후에는 캠페인 이미지 삭제
campaign_count=$(find "$IMAGE_ROOT/campaign" -type f -name "*.jpg" -o -name "*.png" | wc -l)
echo "캠페인 이미지 $campaign_count 개 삭제 예정" >> "$LOG_FILE"
find "$IMAGE_ROOT/campaign" -type f \\( -name "*.jpg" -o -name "*.png" \\) -delete
echo "캠페인 이미지 삭제 완료" >> "$LOG_FILE"
fi
# 선거 당일 이미지
if [ $days_since_election -gt 90 ]; then
# 선거 90일 이후에는 선거 당일 이미지 아카이브로 이동 (삭제 대신)
echo "선거 당일 이미지 아카이브 이동 시작" >> "$LOG_FILE"
# 아카이브 디렉토리 생성
mkdir -p "$IMAGE_ROOT/archive"
# 이미지 압축 후 이동
find "$IMAGE_ROOT/election_day" -type f -name "*.jpg" -exec tar -rf "$IMAGE_ROOT/archive/election_day_images.tar" {} \\; -delete
# 압축 파일 생성 시간 기록
echo "아카이브 파일 생성: $(date)" >> "$LOG_FILE"
echo "아카이브 크기: $(du -h "$IMAGE_ROOT/archive/election_day_images.tar" | cut -f1)" >> "$LOG_FILE"
fi
# 결과 발표 이미지
if [ $days_since_election -gt 180 ]; then
# 선거 180일 이후에는 결과 이미지도 정리
echo "선거 결과 이미지 정리 시작" >> "$LOG_FILE"
# 중요 결과 이미지는 보존, 나머지는 삭제
find "$IMAGE_ROOT/results" -type f -not -name "*_final_*" -delete
echo "결과 이미지 정리 완료" >> "$LOG_FILE"
fi
# 디스크 사용량 보고
echo "디렉토리별 사용량:" >> "$LOG_FILE"
du -sh "$IMAGE_ROOT"/* >> "$LOG_FILE"
echo "===== 선거 이미지 정리 작업 완료: $(date) =====" >> "$LOG_FILE"
# 관리자에게 결과 메일 발송 (옵션)
mail -s "선거 이미지 정리 보고서 $CURRENT_DATE" admin@example.com < "$LOG_FILE"
이 스크립트를 crontab에 등록:
# 매월 1일 새벽 2시에 실행
0 2 1 * * /path/to/election_image_cleanup.sh
요약: cron을 사용한 이미지/파일 자동 삭제의 장점
- 시스템 리소스 최적화: 불필요한 파일을 자동으로 정리하여 디스크 공간 확보
- 자동화된 유지보수: 수동 개입 없이 정기적인 정리 작업 수행
- 맞춤형 정책 적용: 다양한 조건(시간, 크기, 유형 등)에 따른 세분화된 삭제 규칙 적용
- 감사 추적: 삭제 작업의 로그를 남겨 시스템 관리 투명성 확보
- 비즈니스 로직 통합: 선거와 같은 특별 이벤트에 맞춘 파일 관리 정책 구현 가능
cron과 crontab은 리눅스 시스템의 강력한 자동화 도구로, 이미지와 파일 관리를 효율적이고 체계적으로 수행할 수 있게 해줍니다. 특히 서버의 디스크 공간 관리와 오래된 데이터 정리에 필수적인 도구입니다.
반응형
'업무 기록 > ETC' 카테고리의 다른 글
실시간 SQL 인젝션 공격 대응 사례 분석, WAF(웹방화벽)의 방어 (0) | 2025.06.05 |
---|---|
본인인증과 점유인증 기능 개발기 - 실무에서의 적용과 구현 방식 (1) | 2025.06.02 |
윈도우 - 회사 내부망 화면보호기 끄거나 안되게 하는 방법 절전모드 방지 스크립트 (2) | 2025.05.07 |
KISA K-Shield Spring 프레임워크 시큐어코딩 SonarQube 소나큐브 (정적 분석 도구, ISMS) (2) | 2025.05.02 |
Windows 환경에서 Kafka와 Docker download및 실행과 테스트 (1) | 2025.04.25 |