crontab을 이용해 오래된 파일 삭제하기

흑이·2023년 3월 27일

저번 시간에 운영 1,2번 서버를 mount를 하였고

업로드된 파일이 오래된 파일이면 자동적으로 삭제되도록 crontab을 이용하여 적용하기로 하였다.

오래된 파일의 기준은 액세스, 수정, 변경 시간으로 잡을 수 있다. (Access, Modify, Change)

어떤 시간을 기준으로 삭제를 할까 고민을 하다가, 서비스 용도에 따라 최종 수정 시간을 기준으로 삭제하기로 하였다.

처음에 20일 경과된 파일을 삭제 하려고 n(일수)를 20으로 지정하였는데

공부하면서 잘못된 범위인걸 알게되었다. 더 정확하게 알아보고 적용해보자...!

하루의 기준을 0시로 설정하여 달력 일수 단위로 범위를 지정 하려는 경우 daystart 옵션을 사용하면 된다.


Crontab

  • 리눅스에서 crontab은 주기적인 작업을 자동으로 실행시켜주는 유틸리티

  • crontab을 이용해 설정한 작업은 시스템 부팅 후 백그라운드에서 항상 실행되므로, 서버 운영 등에서 매우 유용하게 사용된다.

  • crontab은 다음과 같은 옵션을 사용할 수 있다.

-e: crontab을 편집합니다. 새로운 작업을 추가하거나, 기존 작업을 편집할 수 있습니다.
-l: 현재 crontab에 등록된 작업을 확인합니다.
-r: 현재 crontab에 등록된 모든 작업을 삭제합니다.
-u [사용자명]: 특정 사용자의 crontab을 실행합니다. 이 옵션을 지정하지 않으면 현재 사용자의 crontab을 실행합니다.
-i: 삭제할 작업을 확인하고 삭제할지 묻습니다. 이 옵션을 지정하지 않으면 바로 삭제합니다.


  • crontab 설정 파일은 다음과 같은 형식으로 작성 된다.

분 시 일 월 요일 실행 명령어

  • 여기서, 각 필드는 다음과 같은 의미를 가집니다.

  • 분: 0~59의 값을 가집니다.

  • 시: 0~23의 값을 가집니다.

  • 일: 1~31의 값을 가집니다.

  • 월: 1~12의 값을 가집니다.

  • 요일: 0~6의 값을 가집니다. (0은 일요일, 6은 토요일을 나타냅니다.)

  • 실행 명령어: 해당 시간에 실행할 명령어를 입력합니다.


  • 예를 들어, 매일 오후 5시 30분에 /home/user/test.sh 스크립트를 실행하고 싶다면 다음과 같이 설정할 수 있다.

30 17 * * * /home/user/test.sh



테스트 서버 적용하기

  • 실제 서버에 적용전에 테스트 서버에서 먼저 적용 후 테스트 진행

  • test.txt 테스트 파일 생성

  • stat 명령어를 사용하면 파일의 소유자, 권한, 시간 정보 등 다양한 정보를 확인할 수 있다.
  • 최종 수정 시간을 기준으로 삭제하기

Access: 파일에 대한 최종 엑세스 시간
Modify: 파일에 대한 최종 수정 시간
Change: 파일에 대한 최종 변경 시간


  • -m -t 옵션으로 21일 전으로 설정

  • find 명령어로 파일 타입들 중에서 21일 이상 지난 파일을 찾으면 정상적으로 출력된다.

  • find 명령어에서 -mtime옵션은 파일명에 있는 날짜가 아니라 파일의 타임스탬프로 파일을 검색한다.

  • 기본 사용법은 find -mtime n (일수)를 지정하는데 (n일 전 = n x 24시간전)

  • n이 3 이라고 해서 바로 3일전이 아니라 24시간이 추가 범위적으로 계산됨을 볼 수 있다.

  • 지정된 n숫자 x 24 를 기준시간으로 정하고,

  • 기준시간에서 24시간 과거 시간까지를 시간범위로 지정한다.

  • find -mtime +2 : 3일(72시간) 보다 과거인 보다 이후에 수정된 파일 (기준에서 과거 시간 전체가 검색 대상)


  • crontab -e 추가 내역
  • find 찾은 결과를 끝에 -delete 옵션으로 삭제 하도록 지정
  • 리눅스는 UTC 기준이기 때문에 UTC 기준으로 테스트 진행 (13시 55분에 삭제 되도록)

  • crontab -l 명령어로 등록된 crontab 내역을 확인 할 수 있다.

  • /var/log/cron 경로에 실시간으로 55분에 등록된 명령어가 실행되는지 확인

  • 정상적으로 삭제된 내역을 확인할 수 있다.


https://inpa.tistory.com/entry/LINUX-%F0%9F%93%9A-find-%EB%AA%85%EB%A0%B9-mtime-ctime-atime-%EC%98%B5%EC%85%98-n-n-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

https://xzio.tistory.com/1879

https://daworks.io/1036/

https://ianjang.github.io/crontab-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%A3%BC%EA%B8%B0%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%98%A4%EB%9E%98%EB%90%9C-%ED%8C%8C%EC%9D%BC-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0/

0개의 댓글