Linux 장비에서 주기적으로 로그파일을 삭제할 때
find exec 명령어를 통해 원하는 파일을 삭제하는 방식을 많이 사용하는데, 보통 아래처럼 crontab에 등록해 둔다.
00 0 * * * find /usr/local/logs mtime +7 -exec rm -rf {} \;
이 의미는 /usr/local/logs 디렉토리에 수정시간(mtime) 이 7일 이상된 파일을 삭제(rm -rf) 해 달라는 의미이다.
참고로 rm -rf 의 경우는 파일이든 디렉토리이든 모두 삭제한다.
이렇게 crontab을 등록하니 문제가 발생했다.
/usr/local/logs 디렉토리까지 지워진 것이다.
이를 방지하기 위해서는 4가지 방법이 있다.
1. mindepth 옵션 추가
00 0 * * * find /usr/local/logs -mindepth 1 mtime +7 -exec rm -rf {} \;
/usr/local/logs 하위 디렉토리까지 모두 삭제되어야 한다면 위 처럼 mindepth 옵션을 주면 되며, maxdepth 로 일부 제한할 수도 있다.
2. rm -f 로 변경
00 0 * * * find /usr/local/logs mtime +7 -exec rm -f {} \;
rm -f 로 변경함으로써 /usr/local/logs 하위에 파일만 삭제하도록 변경하면 됩니다.
3. ! -name logs 옵션 추가
00 0 * * * find /usr/local/logs mtime +7 \! -name logs -exec rm -rf {} \;
find 대상에서 디렉토리 명을 이름으로 제외처리 하는 것이다.
4. ! -type d 옵션 추가
00 0 * * * find /usr/local/logs mtime +7 \! -type d -exec rm -rf {} \;
find 대상에서 디렉토리 타입인 경우를 제외처리 하는 것이다.
4가지 방법은 차이는 있지만 최상위 디렉토리가 삭제되는 것을 막아준다.
위 방법 중 적절히 원하는 방법을 사용하면 될 것이다.
이 외에도 우회하는 방법은 많이 있으니, 구글링이나 Linux 책을 찾아보도록 하자.
'Infra > Linux' 카테고리의 다른 글
비밀번호 없이 SSH를 통해 장비 접속하기 (0) | 2016.01.08 |
---|---|
Linux 파일 구조 (0) | 2015.12.31 |
Find 명령어 (0) | 2015.03.16 |
rsync 설정하기 (0) | 2015.03.06 |
crontab 사용법 (0) | 2015.03.06 |