상세 컨텐츠

본문 제목

logrotate 작동 방식 및 작동 시간 (새벽 3시경 랜덤하게 수행되는 이유)

카테고리 없음

by Keunwoo.LEE 2023. 3. 14. 17:15

본문

반응형

Crontab 과 logrotate

Linux 시스템은 기본적으로 crond(crontab) 서비스가 작동되고 있음

@ crontab 과 logrotate 관계 및 흐름도

crontab 과 logrotate 관계 및 흐름도

1. crontab

- /etc/cron.d : 디렉토리에 있는 내용 모두 수행 (default)
- /var/spool/cron : 사용자가 추가한 cron list

2. /etc/cron.d/0hourly

- 0hourly 파일을 보면 /etc/cron.hourly 디렉토리에 있는 내용 모두 수행 (매시 1분에)

# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

3. /etc/cron.hourly/0anacron

- 0anacron 파일을 보면 이미 실행 여부 확인 후 실행 안했으면 anacron 실행

#!/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi

# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s

4. anacron은 /etc/anacrontab 설정을 이용함

  • anacrontab 설정을 보면 daily, weekly, monthly에 따라서 수행하는 시점이 다르고
  • 매일 5분, 매주 25분, 매달 45분에 수행하며
  • 3시 부터 22시 사이에 수행하고
  • 수행할때는 정해진 시간에 RANDOM_DELAY=45 를 적용하여 수행시작 시점에서 45분 사이에 랜덤한 시간에 시작됨
# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1   5   cron.daily      nice run-parts /etc/cron.daily
7   25  cron.weekly     nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly        nice run-parts /etc/cron.monthly

5. anacron이 수행하는 /etc/cron.daily 디렉토리에 logrotate 가 실행됨

- /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

6. logrotate는 logrotate.conf 설정을 이용함

  • logrotate.conf 는 /etc/logrotate.d 디렉토리의 모든 파일을 실행 함
  • 따라서 logrotate.d 디렉토리에 있는 내용은 새벽 3시 이후 랜덤한 시간에 실행되게 됨
  • 만약 3시에 실행되지 못했으면 4, 5, 6 ~ 22시 까지 실행하게 됨
  • logrotate.d 에 신규 설정을 처음 적용하면, 익일에는 실행은 하지만 logrotate가 되지는 않음. /var/lib/logrotate/logrotate.status 에 실행된 내용을 기반으로 logrotate를 수행하기 때문에 첫 익일에는 수행 기록만 남고 그 다음날 부터 이전일에 수행된 기록을 기반으로 logrotate가 실행 됨.
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

logrotate 옵션

설정
의미
daily | weekly | monthly | yearly 
rotate 주기
rotate 개수
순환되어 보관될 파일 개수
compress
순환될 파일 압축(gzip) 
nocompress
순환될 파일 압축하지 않음
compressext 확장자명
압축된 백업로그파일에 지정할 확장자 설정
compresscmd 압축명
gzip이외의 압축파일 지정 
cpmpressoptions 옵션
압축프로그램에 대한 옵션 설정(-9: 압축률 최대)
dateext
로그파일에  YYYYMMDD형식의 확장자 추가
errors 메일주소
에러발생시 지정된 메일주소로 메일 발송
extention 확장자명
순환된 로그파일의 확장자 지정
ifempty
로그파일이 비어있는 경우 순환(기본값)
notifempty 
로그파일이 비어있는 경우 순환하지 않는다.
mail 메일주소
순환 후 이전 로그파일을 지정된 메일주소로 발송
maxage
count로 지정된 날수가 지난 백업파일 삭제
missingok
로그파일이 없을 경우에도 에러처리하지 않는다.
prerotate / endscript
순환작업 전에 실행할 작업 설정
postrotate / endscript
순환작업 후에 실행할 작업 설정
sharedscripts
prerotate, postrotate 스크립트를 한번만 실행
size 사이즈
순환결과 파일사이즈가 지정한 크기를 넘지않도록 설정
copytruncate
현재 로그파일의 내용을 복사하여 원본로그 파일의 크기를 0으로 생성
반응형

댓글 영역