0. 사전 이해
JEUS 8을 이용하고 있고 disk 사용량이 점점 늘어남에 따라 log를 지워줄 필요가 생겼다.
로그를 1달 단위까지만 보관하고 1달 이전의 로그는 스크립트를 통해 자동으로 삭제하도록 한다.
여기서, 데이터 연속성의 결함이 생길 수 있으나, 백업을 받고 있기 때문에 해결된다.
JEUS8에서는 주로 gc, access, jeusserver, jeusnodemanager, jspd 관련 로그들이 쌓인다.
1. 사전 작업
$ su - root #root 계정으로 작업 $ mkdir /script
$ mkdir /script/log $ vi delete_log.sh
2. delete_log 내용 작성
#!/bin/sh
# 2.1) Loging Delete files on '/applog' dir
LOG=/script/log/delete_applog_file_$(date '+%Y-%m-%d').log
if [ ! -e "$LOG" ] ;then
touch $LOG
fi
# 2.2) The script that deletes logs indicating the deletion of logs older than 30 days.
echo " " >> $LOG
echo "#########################################" >> $LOG
date >> $LOG
echo " " >> $LOG
echo "#########################################" >> $LOG
echo "Delete 'log' files older than 30 days in the '/script/log'" >> $LOG
echo " " >> $LOG find /script/log -name "*.log" -ctime +30 >> $LOG
find /script/log -name "*.log" -ctime +30 -exec rm -f {} \;
echo " " >> $LOG
# 2.3) The script that deletes basic logs indicating the deletion of logs older than 7 days.
echo "# Start Delete files(*.phd, .txt, .dmp, .trc, .xml) order than 7days in the '/applog' directory#" >> $LOG
find /applog -name ".phd" -o -name ".txt" -o -name ".dmp" -o -name ".trc" -o -name "*.xml" -mtime +7 >> $LOG
find /applog -name "*.phd" -mtime +7 -exec rm -f {} \; find /applog -name "*.txt" -mtime +7 -exec rm -f {} \;
find /applog -name "*.dmp" -mtime +7 -exec rm -f {} \; find /applog -name "*.trc" -mtime +7 -exec rm -f {} \;
find /applog -name "*.xml" -mtime +7 -exec rm -f {} \;
# 2.4) The script that deletes jeus logs indicating the deletion of logs older than 30 days.
echo "# Start Delete files(Many different types of log file) order than 31 days in the '/applog' directory#" >> $LOG
find /applog/swdpt -name "*gc*.log_20*" -mtime +31 >> $LOG
find /applog/swdpt -name "access_20*.log*" -mtime +31 >> $LOG
find /applog/swdpt -name "JeusServer_20*.log*" -mtime +31 >> $LOG
find /applog/swdpt -name "JeusNodeManager_20*.log" -mtime +31 >> $LOG
find /applog/swdpt -name "jspd\[*\]-20*.log" -mtime +31 >> $LOG
find /applog/swdpt -name "*gc*.log_20*" -mtime +31 -exec rm -f {} \;
find /applog/swdpt -name "access_20*.log*" -mtime +31 -exec rm -f {} \;
find /applog/swdpt -name "JeusServer_20*.log*" -mtime +31 -exec rm -f {} \;
find /applog/swdpt -name "JeusNodeManager_20*.log" -mtime +31 -exec rm -f {} \;
find /applog/swdpt -name "jspd\[*\]-20*.log" -mtime +31 -exec rm -f {} \;
esc 누르고 :wq 하여 저장 !
* 스크립트 명령어 분석 *
스크립트에는 아래 2가지 명령어가 주된 구성이다.
1. find /directory 경로 -name "????" -mtime +31 >> $LOG
2. find /directory 경로 -name "????" -mtime +31 -exec rm -f {} \;
1. 명령어 부터 분석하자면, 해당 명령어는 삭제가 될 로그 파일을 찾아 지정된 경로(LOG)에 기록하는 명령어입니다.
find: 파일을 검색하는 명령어입니다.
/directory 경로: 검색을 시작할 디렉토리 경로입니다.
-name "????": 검색할 파일 이름 패턴을 지정합니다. 와일드카드(*)를 사용하여 어떤 숫자가 와도 상관 없음을 나타냅니다.
-mtime +31: 파일의 수정 시간이 31일 이전인 파일들을 찾습니다. 이 옵션은 파일의 수정 시간을 기준으로 일정 기간 이전에 수정된 파일들을 검색합니다.
>> $LOG: 찾은 삭제가 될 로그 파일들을 $LOG 에 추가해줍니다.
2. 명령어는 특정 경로에서 일정 기간 이상 수정되지 않은 파일을 검색하고 삭제하는 명령어입니다.
- `find`: 파일을 검색하는 명령어입니다.
- `/directory 경로`: 검색을 시작할 디렉토리 경로입니다. 여기서는 "/directory 경로"에 실제로 검색을 원하는 디렉토리 경로를 지정해야 합니다.
- `-name "????"`: 검색할 파일 이름 패턴을 지정합니다. 여기서는 "????"에 실제로 삭제하고자 하는 파일의 이름 패턴을 지정해야 합니다.
- `-mtime +31`: 파일의 수정 시간이 31일 이상인 파일들을 검색합니다. 이 옵션은 파일의 수정 시간을 기준으로 일정 기간 이상 수정되지 않은 파일들을 검색합니다.
- `-exec rm -f {} \;`: 검색된 파일들을 삭제하는 명령어입니다. `-exec` 옵션은 검색된 파일에 대해 지정된 명령어를 실행하라는 의미이며, `rm -f {}`는 검색된 파일을 강제로 삭제하는 명령어입니다. `\;`는 명령어 실행을 마침을 나타냅니다. 검색된 각 파일에 대해 순차적으로 삭제 명령어가 실행됩니다.
3. crontab 설정
$ chmod 755 delete_log.sh
$ crontab -e
- 아래 내용 추가
- 10 10 * * * /script/delete_log.sh
1., 2., 3. 을 정상적으로 처리하면 잘된다. 끝.