휘발성으로 이용되는 파일들이나 로그파일등.. 파일이 생성된지 일정기간이 경과하면 파일을 삭제해야하는(하는게 좋은) 파일들이 있다. 이들을 삭제하기 위한 방법은....

* 생성된지 30일 이상 된 파일만 삭제

/usr/bin/find "대상디렉토리" -type f -ctime +30 -exec /bin/rm -rf {} \;

* 생성된지 30일 이상 된 비어있는 디렉토리만 삭제

/usr/bin/find "대상디렉토리" -empty -type d -ctime +30 -exec /bin/rmdir {} \;

리눅스 버전에 따라 -ctime이 먹지 않는 경우가 있다. 이때는 -mtime으로 대체(의미는 약간 다르지만)한다.

이러한 쉘을 crontab에 하루단위로 동작하도록 등록해두면 편리하겠죵?

Posted by A.J.Kuhn

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

Apache나 Tomcat을 비롯한 많은 서버 어플리케이션들이 로그를 생성하며, 그들은 날짜기반의 로그파일 명을 갖는 경우가 많다. 로그파일은 순수 텍스트기반의 파일로서 압축률이 매우 좋기 때문에, 지난 로그파일들은 압축해서 보관하는 것이 효과적이다.

일 단위 로그는 금일 24시가 지난뒤에야 최종 완성된 로그파일이 생기기 때문에 익일에 파일을 압축하여야 한다. 때문에 crontab에 다음과 같이 등록해준다.
1 0 * * * /opt/script/compress_log.sh

compress_log.sh은 아래와 같이 편집하고 반드시 실행권한을 준다.
gzip /usr/local/apache2/logs/access.log.`date +%Y%m%d --date="1 days ago"`

결국 일자가 포함된 파일명을 추출하는 `date +%Y%m%d --date="1 days ago"`부분이 핵심이다.

crontab의 구체적 사용법은 여기를 참조한다.
Posted by A.J.Kuhn

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

crontab -e로 편집모드로 진입. 편집이 완료되면 :wq 로 종료
별도의 재기동절차는 필요없다.

Quick Reference는 아래를 참조
http://www.adminschoice.com/docs/crontab.htm

원문 : http://hbesthee.tistory.com/276

cron 데몬이 지정된 시간에 주기적인 처리를 위한 정보를 저장해 두는 테이블 파일입니다.

각 줄은 "다섯개의 시간과 날짜 필드, 다음에, 사용자 이름(시스템 crontab 파일일 경우), 다음에 실행될 명령" 이런 형식이다. 지정한 명령은 데몬에 의해, 지정한 날짜, 시간에 실행된다.

필드           사용할 수 있는 값
-----         -----------------
            0-59
            0-23
날짜          0-31
            0-12 (아래 참조, 달 이름을 사용 가능)
요일          0-7 (0 또는 7: 일요일 , 요일이름을 사용 가능)

한 필드에 `*' 문자가 올 수 있는데, 이것은 그 단위 전체를 말한다. (예를 들어, 날짜 부분에 `*' 문자가 오면 `매일'을 뜻한다)
숫자의 범위가 사용될 수 있다. 범위는 하이픈(`-') 문자로 지정하며, 앞에 숫자가 뒷 숫자보다 작아야한다. 예를 들어, 시간 필드에 8-11 이 오면, 8, 9, 10, 11시를 뜻한다.
또한 이 값들은 나열될 수 있으며, 그 구분은 쉼표(`,')로 한다. 예: 1,2,5,9, 0-4,8-12.
값의 범위를 지정할 때, 특정 단위로 건너 뛸 수 있는데, 이것은 그 범위 다음에 `/<숫자>' 형식으로 덧붙혀 준다. 예를 들어, 시간 필드에 `0-23/2' 값이 사용되면, 이것은 두시간 마다, 즉 `0,2,4,6,8,10,12,14,16,18,20,22' 시를 뜻한다. 또한 `매 두시간 마다'라는 뜻으로, `*/2' 이런식으로 사용될 수 있다.
여섯번째 필드(줄의 마지막)에는 실행시킬 명령이 온다. 그 명령이 실행될 때 줄을 나누는 것은 `%' 문자로 하며, 즉, 이것은 쉘에 의해서 다른 명령이 실행됨을 의미한다. (`%' 문자 앞에 있는 것이 하나의 쉘 명령이며, 뒤에 있는 것이 또다른 하나의 쉘 명령임을 뜻한다.) 또한 한 명령인데, 부득이하게 줄을 나누워야 할 경우에는 백슬래쉬(\) 문자를 사용한다.

다른 유저의 profile을 이용해야 하는 경우에는 다음과 같이 처리한다.
/bin/su - myuser -c "myprog">/dev/null 2>&1


@ 주의점
줄, 공문자나, 탭문자로 시작하는 줄, 줄 첫칸에 `#' 문자가 있는 줄은 모두 무시된다.
명령이 지정되어 있는 줄 안에서는 주석을 사용할 수 없다.
환경변수 설정하는 곳에는 이 주석문을 사용할 수 없다.

@ 사용예제
# 명령어를 실행 쉘 지정
SHELL=/bin/sh
# 편지를 받을 사용자 지정
MAILTO=paul
#
# 매일 00시 05분에 특정작업을 하는 경우
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# 매달 1일 오후 2시 15분에
15 14 1 * *     $HOME/bin/monthly
# 월요일부터 금요일 까지 매일 오후 10시에.
0 22 * * 1-5   mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "이것은 매일 0, 2, 4, ... 시 23분에 보여집니다."
5 4 * * sun     echo "이것은 매 일요일 오전 4시 5분에 보여집니다."

Posted by A.J.Kuhn

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절


BLOG main image
A.J.Kuhn, Endless supply of passion!
Generalist A.J.Kuhn의 general한 이야기 by A.J.Kuhn

카테고리

분류 전체보기 (180)
Human (4)
Employee (7)
Developer (14)
Musician (11)
Snowboarder (24)
Traveler (0)
Reviewer (119)
Diver (0)
Driver (1)

글 보관함

달력

«   2019/10   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Total : 213,108
Today : 0 Yesterday : 6