홈 › 리눅스 운영 › 06 / 13

로그·디스크 운영 (logrotate·cron)

섹션 7진행 0 / 13

3. 코드 예제

예제 1: 범인 찾기 — 01_disk_cleanup.sh 발췌

bash
df -h . | awk 'NR==1 || NR==2'
du -sh logs
du -ah logs | sort -rh | head -n 3
find logs -type f -size +1M -printf '%s %p\n' | sort -rn | head -n 3
text
Filesystem   Size  Used Avail Use% Mounted on
/dev/sda2    476G  258G  218G  55% /
2.0M    logs
2.0M    logs/catalina.out
2000000 logs/catalina.out

du -ah | sort -rh 가 폴더와 파일을 섞어 크기순으로 보여 줍니다. 두 줄이면 어느 파일이 범인인지 나옵니다.

예제 2: 삭제·압축 — 01_disk_cleanup.sh 발췌

bash
find logs -name 'app.*.log' -mtime +30 | wc -l
find logs -name 'app.*.log' -mtime +30 -print | head -n 2
find logs -name 'app.*.log' -mtime +30 -delete
find logs -name 'app.*.log' -mtime +7 ! -name '*.gz' -exec gzip -f {} \;
zcat logs/*.gz | head -n 1
text
10
logs/app.2026-08-01.log
logs/app.2026-08-02.log
INFO old log 2026-08-11

개수를 세고, 두 개를 눈으로 보고, 그다음 지웁니다. 세 줄이 같은 조건이라 확인한 것과 지우는 것이 같습니다.

예제 3: 열린 파일 비우기 — 01_disk_cleanup.sh 발췌

bash
ls -l logs/catalina.out | awk '{print $5}'
: > logs/catalina.out
ls -l logs/catalina.out | awk '{print $5}'
text
2000000
0

: 는 아무것도 안 하는 명령이고 > 가 파일을 0 으로 엽니다. 프로세스는 같은 핸들로 계속 쓰므로 재시작이 필요 없습니다.

예제 4: cron 정리 파일 — cleanup.cron

text
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=""
10 3 * * *  myapp  find /opt/myapp/logs -name 'app.*.log*' -mtime +30 -delete >> /opt/myapp/logs/cleanup.log 2>&1
20 3 * * *  myapp  find /opt/myapp/logs -name '*.hprof' -mtime +7 -delete
*/5 * * * *  root  [ "$(df --output=pcent /opt | tail -n 1 | tr -dc 0-9)" -ge 90 ] && echo "$(date) disk over 90%" >> /var/log/disk-alert.log

세 번째 줄은 df 사용률에서 숫자만 뽑아 90 이상이면 경고 줄을 남깁니다. 모니터링 시스템이 없는 폐쇄망에서 이 파일 하나가 알림 역할을 합니다. sudo cp cleanup.cron /etc/cron.d/myapp-cleanup 으로 등록하고 파일 권한은 644 여야 합니다.