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

흑이·2023년 3월 27일
1

저번 시간에 운영 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개의 댓글